完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`程序要求:0~99s数码管显示 程序如下: #include<AT89X52.H> #define uchar unsigned char #define uint unsigned int ***it dula=P2^0; ***it wela=P2^1; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x4e,0x79,0x71 }; uchar second,shi,ge,num; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } void display(uchar num) { shi=num/10; ge=num%10; dula=1; P0=table[shi]; //送十位段选数据 dula=0; P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时 wela=1; //原来段选数据通过位选锁存器造成混乱 P0=0xfe; //送位选数据 wela=0; delayms(5); //延时 dula=1; P0=table[ge]; //送个位段选数据 dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(5); } void main() { num=0; display(num); while(1) { delayms(1000); num++; if(num==100) { num=0; } display(num); } } 为什么显示不正常,求解!谢谢!! ` |
|
相关推荐
12个回答
|
|
首先关键看一下你用的数码管是共阴还是共阳的,你的数码管编码目前是共阴的~首先先排除这个问题。
|
|
|
|
本帖最后由 爱我别走 于 2013-6-25 13:00 编辑
你好,我来给你解答下,希望对你有帮助。 /***************************************************************** 修改版 *****************************************************************/ #include #define uchar unsigned char #define uint unsigned int ***it dula=P2^0; ***it wela=P2^1; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x4e,0x79,0x71 }; uchar second,shi,ge,num; //这里多定义一个变量,用于计数 uchar count; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } void display(uchar num) { shi=num/10; ge=num%10; dula=1; P0=table[shi]; //送十位段选数据 dula=0; P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时 wela=1; //原来段选数据通过位选锁存器造成混乱 P0=0xfe; //送位选数据 wela=0; delayms(5); //延时 dula=1; P0=table[ge]; //送个位段选数据 dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(5); } void main() { num=0; display(num); while(1) { //注意这里的延时,严重阻塞了数码管的扫描。 /导致数码管扫描频率过低,亮不起来。 /* delayms(1000); num++; if(num==100) { num=0; } display(num); */ //这里的delayms(10)和count计数配合达到延时1秒的效果。 //从而减轻了延时对数码管的扫描的阻塞。 delayms(10); count++; if(count==100) { count=0; num++; if(num==100) { num=0; } } display(num); } } //这样做只是一种折中的办法,程序中出现了延时函数,所以还是阻塞了cpu。 //要精确延时最好用定时器。 |
|
|
|
试过了,还是显示异常
|
|
|
|
本帖最后由 爱我别走 于 2013-6-25 22:22 编辑
你所说的异常是指?描述一下?是led出现闪烁?还是显示的数字不对? |
|
|
|
|
|
数字没有按照00~99顺序走,第一位不是显示的数字,是乱码,第二位一直显示6,仿真如下:
|
|
|
|
附上仿真原理图
|
|
|
|
以下修改版程序经过我仿真调试,可以正常运行。 /***************************************************************** 再次修改版 *****************************************************************/ #include #define uchar unsigned char #define uint unsigned int //这里的硬件连接与仿真图不同 //***it dula=P2^0; //***it wela=P2^1; ***it dula=P2^6; ***it wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x4e,0x79,0x71 }; uchar second,shi,ge,num; //这里多定义一个变量,用于计数 uchar count; void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } void display(uchar num) { /*shi=num/10; ge=num%10; dula=1; P0=table[shi]; //送十位段选数据 dula=0; P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时 wela=1; //原来段选数据通过位选锁存器造成混乱 P0=0xfe; //送位选数据 wela=0; delayms(5); //延时 dula=1; P0=table[ge]; //送个位段选数据 dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(5); */ //数据处理 shi=num/10; ge=num%10; //送十位段选数据 P0=table[shi]; dula=1; dula=0; //送位选数据 P0=0xfe; wela=1; wela=0; //延时,让十位保持亮度5ms delayms(10); //关闭所有数码管,消隐 P0=0x00; dula=1; dula=0; //送个位段选数据 P0=table[ge]; dula=1; dula=0; //送位选数据 P0=0xfd; wela=1; wela=0; //延时,让个位保持亮度5ms delayms(10); //关闭所有数码管,消隐 P0=0x00; dula=1; dula=0; } void main() { num=0; display(num); while(1) { //注意这里的延时,严重阻塞了数码管的扫描。 //导致数码管扫描频率过低,亮不起来。 /* delayms(1000); num++; if(num==100) { num=0; } display(num); */ //这里的delayms(10)和count计数配合达到延时1秒的效果。 //从而减轻了延时对数码管的扫描的阻塞。 delayms(10); count++; if(count==40) { count=0; num++; if(num==100) { num=0; } } display(num); } } |
|
|
|
谢谢指点,仿真测试通过了
|
|
|
|
老兄,你太强了,我想问一下为什么用仿真电路来模拟数码管的显示总是很不容易成功呢?总是动不动就出现乱码
|
|
|
|
可能还是程序的原因吧,如果原理图没问题的话,应该不会出现乱码
|
|
|
|
感谢楼主!感谢楼主!感谢楼主!感谢楼主!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
72 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
509 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
546 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
545 浏览 0 评论
1008 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 12:51 , Processed in 0.833013 second(s), Total 65, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号