STC89C52按键数码管怎么实现高位灭0代码
时间: 2024-03-08 13:48:33 浏览: 100
以下是一个基于STC89C52单片机的按键数码管程序,其中包含高位灭0的实现代码:
```
#include <reg52.h> //头文件
sbit KEY1 = P1^0; //定义按键1,连接到P1.0
sbit KEY2 = P1^1; //定义按键2,连接到P1.1
sbit KEY3 = P1^2; //定义按键3,连接到P1.2
sbit DIO = P2^0; //定义DIO数据线,连接到P2.0
sbit CLK = P2^1; //定义CLK时钟线,连接到P2.1
sbit CS = P2^2; //定义CS片选线,连接到P2.2
unsigned char code numTable[] = { //数码管显示的数字编码
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
};
void delay(unsigned int i) //延时函数
{
while(i--);
}
void writeByte(unsigned char dat) //向数码管写入一个字节的数据
{
unsigned char i;
for(i=0; i<8; i++)
{
DIO = dat & 0x01; //将最低位写入DIO线
dat >>= 1; //将数据右移一位
CLK = 1; //置位时钟线
delay(1); //延时一会
CLK = 0; //清零时钟线
}
}
void writeNum(unsigned char num) //向数码管写入一个数字
{
CS = 0; //选中数码管
writeByte(0x44); //写入控制字节,选择自动地址递增模式
CS = 1; //取消选中数码管
CS = 0; //选中数码管
writeByte(0xc0); //写入地址字节,选择第一位数码管
writeByte(numTable[num]); //写入数字的编码
CS = 1; //取消选中数码管
}
void main()
{
unsigned char num = 0;
while(1)
{
if(KEY1 == 0) //按键1按下
{
num++; //数字自增1
if(num > 9) //如果数字大于9,则重置为0
{
num = 0;
}
while(!KEY1); //等待按键1释放
}
if(KEY2 == 0) //按键2按下
{
num = 0; //数字重置为0
while(!KEY2); //等待按键2释放
}
if(KEY3 == 0) //按键3按下
{
break; //退出程序
}
writeNum(num); //向数码管写入数字
if(num == 0) //如果数字为0,则灭掉高位
{
P2 &= ~(1 << 2); //将P2.2引脚输出低电平
}
else
{
P2 |= (1 << 2); //将P2.2引脚输出高电平
}
}
}
```
在上述代码中,实现高位灭0的关键代码为:
```
if(num == 0) //如果数字为0,则灭掉高位
{
P2 &= ~(1 << 2); //将P2.2引脚输出低电平
}
else
{
P2 |= (1 << 2); //将P2.2引脚输出高电平
}
```
其中,P2.2对应的是单片机的第2个引脚,用于控制数码管高位的亮灭状态。如果要实现高位灭0,则需要将该引脚输出低电平,从而灭掉高位的灯珠。
阅读全文