1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
要求
51单片机,用三个7段共阴极数码管动态显示0~99,每隔0.5s刷新一次数字。用keil与Proteus联合仿真。 硬件设计 以AT89C51单片机为核心,包括74HC573锁存器,三个7段共阴极数码管。 1.74HC573锁存器: 功能:用来控制数码管的位选端和段选端。 原理:LE为高电平时,输出随输入而改变,LE为低电平时,输出不随输入而改变。 2.7段共阴极数码管: 位选端:低电平时,选中此数码管;段选端:高电平时相应发光二极管亮起。 共阴极七段数码数据表格: [tr]组合显示数字[/tr]0x3f0 0x061 0x5b2 0x4f3 0x664 0x6d5 0x7d6 0x077 0x7f8 0x6f9 0x77a 0x7cb 0x39c 0x5ed 0x79e 0x71f 3.RESPACK-8排阻 由于P0口没有上拉电阻,不能输出高电平,所以需要外接上拉电阻。 4.Proteus仿真图 程序 1.初始设置 #include《reg51.h》#define unsigned char unchar#define unsigned int uintvoid delayms(uint); //延时函数void show(uint); //数码管显示函数unchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};***it P2^6=a;***it P2^7=b;uint sec=0;uint count=0; 2.延时程序 void delayms(uint rms){ uint i,j; for(i=0;i《rms;i++) for(j=0;j《110;j++);} 3.数码管动态显示程序 void show(uint s){ a=0;b=1; //启动控制位选端的锁存器 P0=0xfb; //选中第三个数码管 a=1;b=0; //启动控制段选端的锁存器 P0=table[s%10]; //使第三个数码管显示此时计时器数字的个位数 delayms(5); a=0;b=1; P0=0xfd; a=1;b=0; P0=table[s/10%10]; delayms(5); a=0;b=1; P0=oxfe; a=1;b=0; P0=table[s/10/10%10]; delayms(5)} 4.中断部分 void jishu() interrupt 1 using 2{ TH0=0x3c; //T0定时50ms,算出TH0和TL0的值 TL0=0xb0; count++; //T0溢出即每过50ms时,count加1 if(count=10) //当count加到20,即刚好经过0.5m,将count清零,sec+1 { count=0; sec++; }} 5.主函数 void main(){ TMOD=0x01; //设置T0工作方式1:16位计数器 EA=1; //CPU中断开放:此时每个中断源的中断允许与否由各自中断允许位决定 ET0=1; //允许T0中断 TR0=1; //开启定时器T0 while(1) { show(sec); }} 结果 |
|
|
|
只有小组成员才能发言,加入小组>>
2548 浏览 0 评论
1145浏览 2评论
744浏览 1评论
498浏览 0评论
263浏览 0评论
424浏览 0评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 12:37 , Processed in 1.276716 second(s), Total 77, Slave 59 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号