设计一个电路实现4位数字LED显示,显示4位数据。控制位为P3.0。即当P3.0=0时,正向显示0000-9999;P3.0=1时,反向显示9999-0000。简述连接方法,编程实现
时间: 2023-07-14 07:14:28 浏览: 117
4位led循环显示0000~9999
连接方法:
1. 连接4个共阳数码管的阳极接到4个P通道MOS管的源极上,P通道MOS管的栅极分别接到4个输出引脚P1.0-P1.3上,P通道MOS管的漏极接到VCC上;
2. 连接4个共阳数码管的阴极分别接到4个输出引脚P1.4-P1.7上;
3. 将控制位P3.0接到开关或按键上,通过按下开关或按键使P3.0的电平分别为0和1。
编程实现:
```
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code duan_ma[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
}; // 共阳数码管段码表,0-9的十六进制码
uchar code wei_ma[] = {
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
}; // 数码管位码表,依次对应P1.4-P1.7
uchar num[4] = {0, 0, 0, 0}; // 待显示的4位数字
void delayms(uint x) { // 延时函数,单位ms
uint i, j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void main() {
uchar i, j;
while(1) {
if(P3 & 0x01) { // P3.0 = 1,反向显示
for(i=9;i>=0;i--) { // 从9999循环到0000
for(j=0;j<50;j++) { // 延时一段时间
P1 = wei_ma[0]; // 第一位
P0 = duan_ma[num[0]];
delayms(5);
P1 = wei_ma[1]; // 第二位
P0 = duan_ma[num[1]];
delayms(5);
P1 = wei_ma[2]; // 第三位
P0 = duan_ma[num[2]];
delayms(5);
P1 = wei_ma[3]; // 第四位
P0 = duan_ma[i];
delayms(5);
}
}
} else { // P3.0 = 0,正向显示
for(i=0;i<=9;i++) { // 从0000循环到9999
for(j=0;j<50;j++) { // 延时一段时间
P1 = wei_ma[0]; // 第一位
P0 = duan_ma[num[0]];
delayms(5);
P1 = wei_ma[1]; // 第二位
P0 = duan_ma[num[1]];
delayms(5);
P1 = wei_ma[2]; // 第三位
P0 = duan_ma[num[2]];
delayms(5);
P1 = wei_ma[3]; // 第四位
P0 = duan_ma[i];
delayms(5);
}
}
}
}
}
```
说明:
1. 首先定义了共阳数码管的段码表和位码表,以及待显示的4位数字数组。
2. 在主函数中,通过判断P3.0的电平,选择正向或反向显示。
3. 在循环中,通过依次输出数码管的位码和对应的段码,并延时一段时间,实现数字的显示。
4. 在延时函数中,通过一个简单的嵌套循环实现延时。
阅读全文