完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序的目标:数码管前三位控制一个秒表,从000到999,一个按键控制这个秒表,当按键按下是秒表自动 复位。
问题:按键按下后,就直接停留在当前数值,不会复位。 程序: [code] #include #define uchar unsigned char #define uint unsigned int uint number; uchar flag_50ms, bai, shi, ge, us, flag; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; ***it segment = P2^7; ***it bitcode = P2^6; ***it key = P2^4; void delay(uchar us);//延时约为500us void key_scan(); void init() { TMOD = 0x11; number = 0; EA = 1; ET0 = 1;
|
|
相关推荐
9个回答
|
|
|
|
|
|
程序:
|
|
|
|
你好,谢谢你的回答。但问题的是出现在变量number上,因为bai,shi,ge是从nungber中的出来的所以如果number没有清零,显示时就会有问题。
|
|
|
|
你好,谢谢你的回答。但问题的是出现在变量number上,因为bai,shi,ge是从nungber中的出来的所以如果number没有清零,显示时就会有问题。
|
|
|
|
根据你的电路板写了这个程序,应该能用。功能上做了一点修改:开机后显示000,按下开关秒表启动,再按下开关停止计时,再按开关清零,如此循环。
#include #define uchar unsigned char #define uint unsigned int ***it bitcode=P2^6; ***it segment=P2^7; ***it key =P2^4; uint number; uchar a; //用来计数按键按下的次数,为每一次设定不同的功能 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //有这10个数就够了,不用把A,B,C,D,E,F 也写在里面 void delay(uchar us) { uchar x,y; for(x=0;x } void key_scan() { if(key==0) { delay(10); if(key==0) { a++; while(!key); if(a==3) { a=0; } } } switch(a) //取上面的a值,给每次按下按键提供不同功能,由下面部分执行各自任务 { case 0: TR0=0; number=0; break; case 1: TR0=1; break; case 2: TR0=0; break; } } void display() { uchar bai,shi,ge; bai=number/100; shi=number%100/10; ge =number%10; bitcode=1; P0=0xdf; bitcode=0; segment=1; P0=table[bai]; segment=0; delay(5); bitcode=1; P0=0xbf; bitcode=0; segment=1; P0=table[shi]; segment=0; delay(5); bitcode=1; P0=0x7f; bitcode=0; segment=1; P0=table[ge]; segment=0; delay(5); } void main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; number=0; while(1) { key_scan(); display(); } } void time0()interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; number++; if(number==1000) { number=0; } } |
|
|
|
真服了你了,你的display(bai,shi,ge)函数中的bai,shi,ge居然是给display作为其局部变量使用; sorry,我没有逐句看你的代码; 因为你对 bai,shi,ge 都进行了赋0操作,所以我就认为你的现实是用 bai,shi,ge 来显示的,所以也就没有继续往下看; 你说的是对的,但是这样的话,你对 bai,shi,ge 的赋0操作就没有意义了,display直接就可以设计成display(),不用参数。最后98-106行之间也还是要安排一个display调用。 |
|
|
|
它们本来就只在display()内使用,为什么还要设成全局变量呢?全局变量number已经把计算好的数值送入display()内了,这个程序在我的测试板上运行良好,工作正常。
|
|
|
|
你的程序风格有点像是从郭天祥老师的教材里学的,不知道是不是?我喜欢这样的程序,好懂。
|
|
|
|
时许逻辑问题,慢慢想吧哈哈!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
479 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
229 浏览 0 评论
334 浏览 0 评论
165 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
496 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11972 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 10:59 , Processed in 0.782359 second(s), Total 87, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号