单片机C语言程序设计之10s的秒表(代码实例)
程序员文章站
2022-03-23 19:29:54
单片机c语言程序设计之10s的秒表(代码实例)
/* 名称:10s 的秒表
说明:首次按键计时开始,https://www.jiakang021.com再次按键暂停,第三次按键清零。...
单片机c语言程序设计之10s的秒表(代码实例)
/* 名称:10s 的秒表 说明:首次按键计时开始,https://www.jiakang021.com再次按键暂停,第三次按键清零。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit k1=p3^7; uchar i,second_counts,key_flag_idx; bit key_state; uchar dsy_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //延时 void delayms(uint ms) { uchar t; while(ms--) for(t=0;t<120;t++); } //处理按键事件 void key_event_handle() { if(key_state==0) { key_flag_idx=(key_flag_idx+1)%3; switch(key_flag_idx) { case 1:ea=1;et0=1;tr0=1;break; case 2:ea=0;et0=0;tr0=0;break; case 0:p0=0x3f;p2=0x3f;i=0;second_counts=0; } } } //主程序 void main() { p0=0x3f; //显示 00 p2=0x3f; i=0; second_counts=0; key_flag_idx=0; //按键次数(取值 0,1,2,3) key_state=1; //按键状态 tmod=0x01; //定时器 0 方式 1 th0=(65536-50000)/256; //定时器 0:15ms tl0=(65536-50000)%256; while(1) { if(key_state!=k1) { delayms(10); key_state=k1; key_event_handle(); } } } /t0 中断函数 void dsy_refresh() interrupt 1 { th0=(65536-50000)/256; //恢复定时器 0 初值 tl0=(65536-50000)%256; if(++i==2) { i=0; second_counts++; //50ms*2=0.1s 转换状态 p0=dsy_code[second_counts/10]; p2=dsy_code[second_counts%10]; if(second_counts==100) second_counts=0; //满 100(10s)后显示 00 } }
下一篇: SQL Server 文件和文件组