历史上的今天
今天是:2025年03月05日(星期三)
2020年03月05日 | 51单片机(AT89C52)一键多功能(短按、长按)
2020-03-05 来源:eefocus
短按(按下持续时间小于3s)一次数码管显示加1,同时流水灯计数加1。
长按(按下持续时间大于3s)时,数码管显示每500ms加1,同时流水灯每500ms计数加1。
#include typedef unsigned char uchar; typedef unsigned int uint; #define NOKEY 0 #define KEYDOWN 1 #define KEYUP 2 uchar keystate; sbit key=P2^7; void keyscan(void); uchar timeflag; uchar code table[]= { 0x80,0xf2,0x48,0x60, 0x32,0x24,0x04,0xf0, 0x00,0x20,0x10,0x06, 0x8c,0x42,0x0c,0x1c }; uchar i; void main(void) { TMOD=0x10; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET1=1; TR1=1; while(1) { if(timeflag) { timeflag=0; keyscan(); } } } void keyscan(void) { static uchar iscontinue=0; P2 |=0x80; switch(keystate) { case NOKEY: if(key==0) { keystate=KEYDOWN; return; } else { keystate=NOKEY; return; } case KEYDOWN: if(key==0) { keystate=KEYUP; return; } else { keystate=NOKEY; return; } case KEYUP: if(key==0) { keystate=KEYUP; iscontinue++; if(iscontinue==255) iscontinue=60; if(iscontinue>=60) { if(iscontinue%10==0) { P2+=1; P1=table[i++]; if(i>=16) i=0; } } return; } else { keystate=NOKEY; if(iscontinue<60) { P2+=1; P1=table[i++]; if(i>=16) i=0; } iscontinue=0; return; } } } void timer1isr() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; timeflag=1; } 

史海拾趣
|
一、成长--从摇滚青年到设计精英 9月的一天,在一场技术研讨会上,A君一边老到地翻看着Demo板,一边询问着一些技术细节,俨然一个技术高手,可是谁能想到,3年前,他曾是一个痴迷音乐的摇滚青年。 那是2 ...… 查看全部问答> |
|
最近在做电源管理这部分,想修改D:\\WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\PM\\PDD\\里的default文件。 但想想要是每次调试修改都要sysgen,那不死人啦。有没有大侠知道有没有简单的方法编译下。望指点迷津。… 查看全部问答> |
|
版本是IAR 3.1A 连接时产生的错误 Error[e46]: Undefined external "?cstart_init_zero" referred in fet440_ta02 ( C:\\Documents and Settings\\dlh\\My Documents\\Debug\\Obj\\fet440_ta02.r43 ) 请问这是什么错误啊? 我检查了下,发 ...… 查看全部问答> |




