-
我关了看门狗的。不过现在我终于找到原因了,因为其中一个引脚是“复位”功能。我直接把它与LED灯连接后接地,所以一直有“复位”信号存在,程序也就始终在“不执行”了
-
大概看了下,图文并茂的蛮不错,但感觉内容有点少,不知道能不能把模电的那些精髓讲清楚,看完后再说。呵呵
-
说得很实在。
-
我晕,楼主MM不厚道了哦,居然还收费:L
-
哈哈,又是按键抖动的问题。不知道当初我那篇帖子还能找得到不。当初我那帖子也是炸出了不少高手牛人来讨论呢
-
唉,楼主MM跟我何其相似啊,我也是到公司都快半年了,感觉什么都做。一方面是真想好好学学东西,但另一方面又无从学起。烦啊
-
来了,再顶顶。
-
前不久看到坛子里的那篇“从单片机初学者迈向单片机工程师”受益匪浅。现在想看看模电方面的知识就发现这篇帖子,真的是太好了,非常的幸运啊
-
“在中断里来个大延时”?中断里弄延时不是单片机设计里的大大忌吗?(大忌是在主函数延时:funk: )而且消抖的方法有很多啊,我这里只是想看看这个“抖动”,而不是去“消抖”。感觉很多人都误以为我是在讨论“消抖”的方法呢?我觉得我在开头已经说明得很清楚了啊:L
-
呵呵,那也要感谢你一直以来的关注哦。其实我就觉得吧,有问题在讨论上发了帖子,无论怎么样,你现在的进展如何,是否问题已经解决,都应该有一个回复。这是对论坛,对各位回复你的网友一个交待。呵呵
-
呵呵,真感谢你的回复,为了把代码贴上来,我重新整理了一下,结果发现的确是自己的显示函数充当了“消抖”功能,现把原程序发上来,大家仔细看看就知道问题出在那里呢:L
#include
#define uchar unsigned char
#define uint unsigned int
#define LED_PORT P0 //定义数码管输出
bit g_systTime2Ms=0; //定义时间标志位
bit g_time10Ms=0;
bit flag=0; //定义一个按键标志位
sbit io_seg=P2^6; //段选
sbit io_bit=P2^7; //位选
sbit key1=P3^4; //定义按键
uchar g_num=0; //定义初始显示值为0
uchar g_dispBuffTemp[6]={0}; //显示缓存区
uchar code g_dispCodeTab[]={ //字符编码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void Display() //动态扫描数码管函数
{
static uchar s_dispCycle=0;
uchar dispPostTemp[]={1,2,4,8,16,32};
if(g_systTime2Ms)
{
g_systTime2Ms=0;
io_seg=1; //送段选
LED_PORT=g_dispBuffTemp[s_dispCycle];
io_seg=0;
LED_PORT=0xff; //消影
io_bit=1; //送位选
LED_PORT= ~dispPostTemp[s_dispCycle];
io_bit=0;
if(++s_dispCycle>=6) s_dispCycle=0;
}
}
void DispHex(uchar hex,uchar pos) //给数码管送值函数
{
pos=pos%6;
g_dispBuffTemp[pos]=g_dispCodeTab[hex];
}
void DsipNum() //显示数值函数
{
DispHex(g_num/10,0);
DispHex(g_num%10,1);
Display();
}
void Timer0Init() //中断初始化函数
{
TMOD=0X01;
TH0=0XF8;
TL0=0XCC;
ET0=1;
TR0=1;
}
void Timer0() interrupt 1 //中断函数
{
static s_countFor10Ms=0;
TH0=0XF8;
TL0=0XCC;
g_systTime2Ms=1;
if(++s_countFor10Ms>=5)
{
s_countFor10Ms=0;
g_time10Ms=1;
}
}
void main()
{
Timer0Init();
EA=1;
while(1)
{
if(flag)
{
if(key1==0)
{
if(++g_num>=100) g_num=0;
flag=0;
}
}
else
{
if(key1==1) flag=1;
}
}
DsipNum();
}
-
共同学习,共同进步
-
貌似到现在我都没有真正的做过一个电子作品,泪奔而去……
-
呵呵,楼上先莫激动。不过想想也对,LZ你的态度很有问题,没人亏欠你什么,像你这样一上来就要这要那的,基本上是没人采你的……。最好你是自己动脑筋想想,在GOOGLE百度上多找找资料,实在不会的再来讨论。不过呢,像LZ这样张口就要的性格,多半也不会去下功夫找资料什么的,毕业设计嘛,到时候在老师那里拿一段“参考程序”一切就OK了,唉,当年自己的毕业设计这是这样做的。真的很悲哀
-
你是想问你这个交通灯这样设计是否正确,还是程序本身是否正确?呵呵,如果是前者,你自己慢慢去想喽。后者的话,我身边也没带开发板,不然就帮你试试了。呵呵,不过了发现你程序有几个地方不太好,
1.你的delayms(500);有什么用?亮500ms吗?你不是用了中断吗?干什么还用这个delayms函数?
2.单片机应用中,少用这种delayms函数,这是让单片机什么也不干就在那里“空等”,这是单片机设计一大忌。
3.这种LED显示,亮一盏灯的时候,最好把其它灯都关掉,不然因为眼睛的延时作用会觉得灯就在亮着的。
以上纯属个人见解,欢迎拍砖,大家都讨论讨论。:)
-
非常感谢你的回复,关于这个按键抖动的问题,你总是给出具体的解决方法,而且我也的确从中得到相应的帮助。关于更深入的探究,小弟实在不才,初学单片机,一时半会也深入不到哪去,还是就此打住,至少我现在把这个按键抖动理解了七七八八了。呵呵
-
哇哦,管理员都出来,看来我这帖子发得很有水准嘛:loveliness:
还有我说的加威望之类的纯粹玩笑话:hug:
-
呵呵,谢谢你给的检测方法哦。现在我重新找了一个按键按你的方法接单片机的外部中断。的确是有抖动的,多按几次后,会发现有那么一两次会加2之类的。呵呵,我怎么就没想到用外部中断测脉冲的方法来检测这个抖动呢,唉。
对了,你所说的抖动时间也可以用这种方法来检测的,相当于检测这个脉冲的高/低电平时间嘛,用计数器来计数就行啊,呵呵
-
谢谢版主大人的回复呵。其实我就是想看到,我不消抖的话,按一次键出现多次按键这种情况。然而无论我怎么测试都“不存在抖动”,于是就对这个按键抖动对程序到底有多大的影响心里没底了。基础对这个“按键抖动”产生的怀疑……
还有,为什么版主这么容易加威望和芯币啊?
我也要加威望,我也要加芯币:@
我也要加威望,我也要加芯币:@
我也要加威望,我也要加芯币:@
-
共同学习,共同讨论,共同进步:)