基于Proteus的四位数码管显示

本文介绍了一种基于Proteus的四位数码管显示实验,通过P0口连接断码线,P2口低四位控制位选线,实现字符显示。实验中采用共阴极数码管,并提供了C51代码示例,能依次或同时显示数字'1,2,3,4'。" 78831092,7333081,使用remastersys创建ROS系统基线,"['ROS开发', '系统安装', '软件工具', 'Ubuntu', 'SSH配置']
摘要由CSDN通过智能技术生成

1实验原理

P0口接断码线, P2口低四位接位选线,第一位数码管的位选线由P2.0来控制,第二位数码管的位选线由P2.1来控制,依次类推,
由此可知可以控制P2.0到p2.3引脚,从而控制这个数码管哪一位来显示字符,而通过控制P0口输出断码值来控制数码管显示什么样的字符
从而实现四位数码管的显示,由此也可推出多位数码管显示的原理。

2Proteus仿真电路图

在这里插入图片描述
此实验用到的是一个共阴极数码管

3所用元器件图

在这里插入图片描述

4C51代码

#include<reg51.h> //定义头文件
#define uchar unsigned char	  
以下是基于 8051 单片机的 Proteus 独立按键控制四位数码管的程序示例: ``` #include <reg52.h> // 数码管引脚定义 sbit DIG_A = P0^0; sbit DIG_B = P0^1; sbit DIG_C = P0^2; sbit DIG_D = P0^3; // 按键引脚定义 sbit KEY1 = P1^0; sbit KEY2 = P1^1; sbit KEY3 = P1^2; sbit KEY4 = P1^3; // 数码管显示表 unsigned char code DIG_TBL[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; // 全局变量 unsigned char cnt = 0; // 数码管当前显示的数字 unsigned char dig = 0; // 当前显示的数码管位数 // 延时函数 void delay(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 120; j++); } // 数码管显示函数 void display(unsigned char num) { DIG_A = DIG_B = DIG_C = DIG_D = 1; // 关闭所有数码管 switch (dig) { // 根据当前位数选择要显示的数码管 case 0: DIG_A = 0; break; case 1: DIG_B = 0; break; case 2: DIG_C = 0; break; case 3: DIG_D = 0; break; } P2 = DIG_TBL[num]; // 显示数字 } // 中断函数 void key_isr() interrupt 0 { delay(10); // 延时去抖动 if (KEY1 == 0) { // 按键 1 cnt++; if (cnt > 9) cnt = 0; } else if (KEY2 == 0) { // 按键 2 cnt--; if (cnt > 9) cnt = 9; } else if (KEY3 == 0) { // 按键 3 dig++; // 切换显示位数 if (dig > 3) dig = 0; } else if (KEY4 == 0) { // 按键 4 dig--; if (dig < 0) dig = 3; } } // 主函数 void main() { TMOD = 0x01; // 设置定时器 0 为模式 1 TH0 = 0x3c; // 定时器初值(1ms) TL0 = 0xb0; ET0 = 1; // 开启定时器 0 中断 EA = 1; // 开启全局中断 TR0 = 1; // 启动定时器 0 while (1) { display(cnt); // 显示数码管 } } // 定时器 0 中断函数 void timer0_isr() interrupt 1 { static unsigned char cnt2 = 0; TH0 = 0x3c; // 重新设置定时器初值 TL0 = 0xb0; cnt2++; if (cnt2 > 20) { // 每 20ms 刷新一次数码管 cnt2 = 0; dig++; // 切换显示位数 if (dig > 3) dig = 0; } } ``` 该程序通过定时器中断和按键中断来实现独立按键控制四位数码管的功能,主函数中的 `while(1)` 循环不断调用 `display()` 函数来显示数码管,定时器中断每 20ms 刷新一次数码管的显示位数,按键中断则根据按键编号来增加或减少计数器的值,并切换显示位数。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值