单片机交流
登录
直播中
王辉
7年用户
1248经验值
私信
关注
[问答]
如何去实现一种基于51单片机的三个7段共阴极数码管动态显示0~99的设计?
开启该帖子的消息推送
数码管
51单片机
如何去实现一种基于51
单片机
的三个7段共阴极数码管动态显示0~99的设计?
如何对基于51单片机的三个7段共阴极数码管动态显示0~99的设计进行
仿真
?
回帖
(1)
石双厚
2021-7-19 10:57:56
要求
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); }} 结果
要求
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); }} 结果
举报
更多回帖
rotate(-90deg);
回复
相关问答
数码管
51单片机
急需STC89C
51
单片机
8位
共
阴极
数码管
动态显示
01234567的汇编语言程序
2022-01-13
1530
如何利用
51
单片机
实现
数码管
的静态与
动态显示
?
2021-10-25
1813
如何
去
实现
一种
基于
51
单片机
的静态
数码管
显示
数字的设计
2021-10-19
1185
怎样
去
搭建
一种数码管
的仿真电路呢
2021-09-13
1629
求AT89C
51
动态显示
共
阳极
数码管
的汇编程序
2021-07-15
1636
如何利用
51
单片机
实现
数码管
静态与
动态显示
?
2021-09-28
1150
如何
去
实现
一种
基于AT89C
51
单片机
的
数码管
循环点亮
0
到9设计
2021-10-19
2701
如何利用
51
单片机
实现
七
段数码管
的
显示
?
2021-10-21
2229
如何设计8
段数码管
动态显示
IP核?
2019-08-09
1741
数码管
动态
扫描
2011-04-03
6743
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分