完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求助!
想用51的定时器做一个可以产生时分秒的时钟,用共阴数码管仿真成功了,准备焊的时候发现没共阴数码管,就想把程序改成共阳的,段码,位码都改了,可数码管不显示,或者乱码,求大神指教(电路图、代码均已附上) 代码如下 #include "reg52.h" #define codport P0 //段码输出口 #define sitport P2 //位码输出口 unsigned char code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳1-9码 unsigned char data hou,min,sec,num,di***uf[]={0,0,10,0,0,10}; /*显示函数*/ void display() { unsigned int j; unsigned char i,scan; //scan 为输出控制的显示位的位码,也叫扫描码 codport=0; scan=0x01; for(i=0;i<6;i++) { codport=0; //清屏,显示新内容前不清屏会出现乱码 codport=ledcode[di***uf]; //将要显示的数送至段码口 sitport=scan; //位码口高电平对应位有效 scan=(scan<<1); //指向下一位 for(j=0;j<5;j++); //延时 } } /*主函数*/ void main() { TMOD=0x01; TL0=55536%256; TH0=55536/256; ET0=1; EA=1; TR0=1; while(1) display(); } /*中断函数*/ void time0() interrupt 1 { TL0=55536%256; TH0=55536/256; num=num+1; if(num==100) { num=0; sec=sec+1; if(sec==60) { sec=0; min=min+1; if(min==60) { min=0; hou=hou+1; if(hou==24) hou=0; } } di***uf[0]=hou/10; //将时间转换为要显示的数字 di***uf[1]=hou%10; di***uf[2]=min/10; di***uf[3]=min%10; di***uf[4]=sec/10; di***uf[5]=sec%10; } } |
|
相关推荐
5个回答
|
|
已解决,问题出在第11行清屏代码,段码与位码我改了,但忘了一个重要的地方,清屏,共阴数码管是高电平点亮,所以要低电平清屏;而共阳数码管是低电平点亮,所以要高电平清屏,将代码改为codport=0xff即可
|
|
|
|
慢慢研究下,比较喜欢实际仿真,对protues不感冒
|
|
|
|
单片机IO口不能直接驱动数码管 要用三极管或者 锁存器驱动
|
|
|
|
已解决,仿真不用锁存器也可以的
|
|
|
|
编程真是个细心活儿
|
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9049 浏览 16 评论
4083 浏览 18 评论
1167浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 22:55 , Processed in 1.335190 second(s), Total 88, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号