完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 biubiubiu_hhh 于 2017-3-24 11:35 编辑
基于51单片机串口通信如何实现使数据显示在数码管上,输入几显示几(如输入222,则数码管显示222)程序如下,我延时看了一下,0-99可以显示,但是都在一个数码管里显示,所以如果不延时看的话两位数的时候根本就看不出来,这是为什么呢?99以后的数只显示前两位,这又是为什么呢?拜托指教一下(真诚的眼神--拜托) #include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; ***it LSA=P2^2; ***it LSB=P2^3; ***it LSC=P2^4; u8 disp[4]; u8 num; u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(u16 i) { while(i--); } void UsarInit() { SCON=0x50;//设置为工作方式1 TMOD=0x20;//设置寄存器工作方式2 PCON=0x80;//波特率加倍 TH1=0xf3;//计数器初始值设置,注意波特率是4800的 TL1=0xf3; ES=1;//打开接收中断 EA=1;//打开总中断 TR1=1;//打开计数器 } void datapros() { num -= 48; disp[0]=smgduan[num/1000]; //千位 disp[1]=smgduan[num%1000/100]; //百位 disp[2]=smgduan[num%1000%100/10]; //十位 disp[3]=smgduan[num%1000%100%10]; //个位 } void DigDisplay() { u8 i; for(i=0;i<4;i++) { switch(i) //位选,选择点亮的数码管 { case(0): LSA=0;LSB=0;LSC=0;break; //显示第0位 case(1): LSA=1;LSB=0;LSC=0;break; //显示第1位 case(2): LSA=0;LSB=1;LSC=0;break; //显示第2位 case(3): LSA=1;LSB=1;LSC=0;break; //显示第3位 } P0=disp[3-i]; //发送数据 delay(50000); //间隔一段时间扫描 P0=0x00; //消隐 } } void main() //定义主函数 { UsarInit();//串口初始化 while(1); } void Usart() interrupt 4 { num=SBUF;//出去接收到的数据 RI=0;//清除接收中断标志位 SBUF=num;//将接收到的数据放入到发送寄存器 while(!ti);//等待发送数据完成 TI=0;//清除发送完成标志位 datapros(); DigDisplay(); } |
|
相关推荐
2个回答
|
|
谢谢楼主分享
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3974 浏览 0 评论
8518 浏览 0 评论
5943 浏览 0 评论
4089 浏览 1 评论
5180 浏览 0 评论
请问一下qspi mtsr引脚传输一次32bit后引脚不拉低怎么解决?
408浏览 2评论
646浏览 2评论
4749浏览 2评论
最近UJA1023开发遇到问题了,各位大神有谁知道可以替代这颗芯片的
582浏览 1评论
807浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 10:56 , Processed in 0.626820 second(s), Total 104, Slave 86 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号