完善资料让更多小伙伴认识你,还能领取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次后重新统计。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11764 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 05:07 , Processed in 0.742446 second(s), Total 90, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号