完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位前辈,小弟有个问题想请教,刚学单片机,磕磕碰碰。现在是有共阴极数码管,然后我想让它准确定时一秒,然后数字发生变化。代码如下
#include ***it duan=P2^2;//共阴极数码管,段锁存 ***it wei=P2^3;//共阴极数码管,位锁存 unsigned char i; unsigned int tt; void timer0(); unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0123456789 void main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256;//设定初值,,计数50MS EA=1; ET0=1;//开定时器0 TR0=1;//启动定时器0 wei=1;//打开位选通位 P0=0xfe;//选定第一个数码管 wei=0;//关闭位选通位 while(1) { for(i=0;i<9;i++) { if(tt==20) { tt=0; //duan=1; 这个和下面那个//duan=0调试时发现不要用,如果加上就直接停在数字2不动了,没搞懂 P0=duanma; //duan=0; } } } } void timer0() interrupt 1 { TH0= (65536-50000)/256 ; TL0= (65536-50000)%256 ; tt++; 存在的问题是1,上面红色代码,for语句,如果吧数字改成<=9,就直接乱变化0,7,5,,,等不按顺序来,只好改成小于,但只能变化到8,如果改成小于10又和前面的问题一样乱变化。2,前面那两个duan=1和0怎么不需要呢在程序中,不是用来选通段,改变数字的么,写上直接变化到2就不动了。3,在前面这些问题都没有的情况下,数字的变化怎么不是一秒钟变化一次。。哎,,搞了好久,是在不知道在哪出问题了,请各位不吝赐教。小弟初学者感觉单片机好难啊 |
|
相关推荐
2个回答
|
|
P0应该写成P0=duanma[i] 段码就是P0 ,选通数码管 应该是位就是你的 定义的WEI
|
|
|
|
首先赋定时器初值时最好用16进制,否则51还要帮你转化会浪费一段时间。然后tt++;tt=20也最好放中断里,一类的就归一类。还有就楼上说的。最后提醒一下,段选赋完值关段选后要消影,共阴0xff,阳0x00;还要延时1ms差不多
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11977 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 16:20 , Processed in 0.611571 second(s), Total 72, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号