完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
#include
#include unsigned char data dis_digit; unsigned char key_s, key_v; unsigned char sec100; //定义这个是干什么的? unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char data dis_buf[8]; unsigned char data dis_index; unsigned char hour,min,sec; ***it K1 = P3^4; ***it K2 = P3^5; ***it dula=P2^6; ***it wela=P2^7; bit scan_key(); //子函数什么意思 void proc_key(); //子函数什么意思 void inc_sec(); void inc_min(); void inc_hour(); //void display(); void delay(unsigned char ms); void display1(unsigned char a1,unsigned char a2,unsigned char a3,unsigned char a4,unsigned char a5,unsigned char a6); void main(void) { P0 = 0xff; P2 = 0xff; TMOD = 0x11; TH1 = 0xdc; TL1 = 0; TH0 = 0xFC; TL0 = 0x17; hour = 12; min = 00; sec = 00; sec100 = 0; dis_buf[0] = hour / 10; dis_buf[1] = hour % 10; dis_buf[3] = min / 10; dis_buf[4] = min % 10; dis_buf[6] = sec / 10; dis_buf[7] = sec % 10; // dis_buf[2] = 0xbf; // dis_buf[5] = 0xbf; dis_digit = 0xfe; dis_index = 0; TCON = 0x01; IE = 0x8a; TR1 = 1; key_v = 0x03; while(1) { if(scan_key()) { delay(10); if(scan_key()) { key_v = key_s; proc_key(); } } display1(dis_buf[0],dis_buf[1],dis_buf[3],dis_buf[4],dis_buf[6],dis_buf[7]); } } bit scan_key() { key_s = 0x00; key_s |= K2; key_s <<= 1; key_s |= K1; return(key_s ^ key_v); } void proc_key() { EA = 0; if((key_v & 0x01) == 0) // K1 { inc_hour(); } else if((key_v & 0x02) == 0) // K2 { min++; if(min > 59) { min = 0; } dis_buf[3] = min / 10; dis_buf[4] = min % 10; } EA = 1; } void timer1() interrupt 3 { TH1 = 0xdc; sec100++; if(sec100 >= 100) { sec100 = 0; inc_sec(); } } void inc_sec() { sec++; if(sec > 59) { sec = 0; inc_min(); } dis_buf[6] = sec / 10; dis_buf[7] = sec % 10; } void inc_min() { min++; if(min > 59) { min = 0; inc_hour(); } dis_buf[3] = min / 10; dis_buf[4] = min % 10; } void inc_hour() { hour++; if(hour > 23) { hour = 0; } if(hour > 9) dis_buf[0] = hour / 10; else dis_buf[0] = 0x00; dis_buf[1] = hour % 10; } void delay(unsigned char ms) { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } } void display1(unsigned char a1,unsigned char a2,unsigned char a3,unsigned char a4,unsigned char a5,unsigned char a6) { dula=0; P0=table[a1]; //œ‘ æ∞ŸŒª dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay(1); dula=0; P0=table[a2]; //œ‘ æ ÆŒª dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(1); P0=table[a3]; //œ‘ æ∏ˆŒª dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay(1); P0=table[a4]; //œ‘ æ∏ˆŒª dula=1; dula=0; P0=0x77; wela=1; wela=0; delay(1); P0=table[a5]; //œ‘ æ∏ˆŒª dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(1); P0=table[a6]; //œ‘ æ∏ˆŒª dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(1); } |
|
相关推荐
1 条评论
2个回答
|
|
|
sec是用来计数的,数到100为1秒,bit scan_key()函数是用来判断是否有按键按下的,无论K1或K2按下,或者两个按键一起按下都会返回1,但是这个函数不能判断具体是哪个按键被按下,所以需要void proc_key()函数来判断具体是哪个按键被按下,若K1被按下执行inc_hour()一次,小时hour 被加一,若K2被按下执行分钟min被加一。
|
|
|
|
|
|
计时使用的,定时器中断次数,统计定时器是否中断100次。100次后重新统计。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
234 浏览 0 评论
514 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
826 浏览 0 评论
1366 浏览 2 评论
814 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16911 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 01:19 , Processed in 0.979922 second(s), Total 91, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4097