C51程序编程单片机数码管显示与按键设计
时间: 2024-01-20 09:02:22 浏览: 185
C51程序编程可以实现单片机数码管显示和按键设计。以下是一个示例程序,实现了一个简单的计数器,通过按键控制加减和清零操作,同时在数码管上显示计数器的值。
```
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key_add = P0^0; //加键
sbit key_sub = P0^1; //减键
sbit key_clr = P0^2; //清零键
sbit LED1 = P2^0; //数码管第一位
sbit LED2 = P2^1; //数码管第二位
sbit LED3 = P2^2; //数码管第三位
sbit LED4 = P2^3; //数码管第四位
uchar code table[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; //数码管码表
uint num = 0; //计数器值
void delayms(uint x) //延时函数
{
uint i,j;
for (i=x; i>0; i--)
for (j=110; j>0; j--);
}
void display() //数码管显示函数
{
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0; //先全部清零
if (num >= 1000) {LED1 = 1; P0 = table[num/1000]; delayms(2);} //千位
if (num >= 100) {LED2 = 1; P0 = table[num%1000/100]; delayms(2);} //百位
if (num >= 10) {LED3 = 1; P0 = table[num%100/10]; delayms(2);} //十位
LED4 = 1; P0 = table[num%10]; delayms(2); //个位
}
void main()
{
while (1)
{
if (key_add == 0) {delayms(10); if (key_add == 0) num++; while (!key_add);}
if (key_sub == 0) {delayms(10); if (key_sub == 0) num--; while (!key_sub);}
if (key_clr == 0) {delayms(10); if (key_clr == 0) num = 0; while (!key_clr);}
display();
}
}
```
在这个程序中,我们定义了三个按键和四个数码管的控制引脚。数码管显示使用了一个码表,将数字转换为对应数码管的控制码。在主函数中,通过不断循环检测按键状态和更新计数器值,然后调用数码管显示函数实现显示。需要注意的是,由于数码管具有一定的刷新速度,所以需要添加适当的延时以保证显示效果。
阅读全文