用keil5编写STC单片机74hc164驱动8位数码管动态显示的C语言代码
时间: 2024-02-16 22:04:41 浏览: 119
好的,以下是使用Keil5编写STC单片机74hc164驱动8位数码管动态显示的C语言代码,您可以根据需要进行修改:
```
#include "stc89c52.h"
// 定义数码管的8个位选引脚和8个段选引脚
sbit LED_COM1 = P2^0;
sbit LED_COM2 = P2^1;
sbit LED_COM3 = P2^2;
sbit LED_COM4 = P2^3;
sbit LED_COM5 = P2^4;
sbit LED_COM6 = P2^5;
sbit LED_COM7 = P2^6;
sbit LED_COM8 = P2^7;
sbit LED_A = P3^0;
sbit LED_B = P3^1;
sbit LED_C = P3^2;
sbit LED_D = P3^3;
sbit LED_E = P3^4;
sbit LED_F = P3^5;
sbit LED_G = P3^6;
sbit LED_DP = P3^7;
// 定义动态显示程序的数组
unsigned char code LED_TAB[]={
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
// 定义定时器中断计数器
unsigned int count = 0;
// 定义动态显示函数
void Display(unsigned char *p);
// 定义定时器中断函数
void Timer0_ISR() interrupt 1
{
TH0 = 0xFC; // 定时器计数初值
TL0 = 0x67;
count++; // 计数器加1
if (count >= 500) // 每隔500ms刷新一次数码管
{
count = 0;
Display(LED_TAB); // 调用动态显示函数
}
}
// 主函数
void main()
{
// 初始化IO口
P2 = 0x00; // P2口设置为输出模式
P3 = 0x00; // P3口设置为输出模式
LED_COM1 = 1; // 数码管关闭
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
LED_COM5 = 1;
LED_COM6 = 1;
LED_COM7 = 1;
LED_COM8 = 1;
LED_A = 0;
LED_B = 0;
LED_C = 0;
LED_D = 0;
LED_E = 0;
LED_F = 0;
LED_G = 0;
LED_DP = 0;
// 初始化定时器
TMOD = 0x01; // 定时器0,模式1
TH0 = 0xFC; // 定时器计数初值
TL0 = 0x67;
ET0 = 1; // 开启定时器中断
TR0 = 1; // 启动定时器
// 主循环
while(1);
}
// 动态显示函数
void Display(unsigned char *p)
{
static unsigned char i = 0;
i++;
if (i > 8) i = 1;
switch(i)
{
case 1:
LED_COM1 = 0;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
LED_COM5 = 1;
LED_COM6 = 1;
LED_COM7 = 1;
LED_COM8 = 1;
P3 = *(p + 0);
break;
case 2:
LED_COM1 = 1;
LED_COM2 = 0;
LED_COM3 = 1;
LED_COM4 = 1;
LED_COM5 = 1;
LED_COM6 = 1;
LED_COM7 = 1;
LED_COM8 = 1;
P3 = *(p + 1);
break;
case 3:
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 0;
LED_COM4 = 1;
LED_COM5 = 1;
LED_COM6 = 1;
LED_COM7 = 1;
LED_COM8 = 1;
P3 = *(p + 2);
break;
case 4:
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 0;
LED_COM5 = 1;
LED_COM6 = 1;
LED_COM7 = 1;
LED_COM8 = 1;
P3 = *(p + 3);
break;
case 5:
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
LED_COM5 = 0;
LED_COM6 = 1;
LED_COM7 = 1;
LED_COM8 = 1;
P3 = *(p + 4);
break;
case 6:
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
LED_COM5 = 1;
LED_COM6 = 0;
LED_COM7 = 1;
LED_COM8 = 1;
P3 = *(p + 5);
break;
case 7:
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
LED_COM5 = 1;
LED_COM6 = 1;
LED_COM7 = 0;
LED_COM8 = 1;
P3 = *(p + 6);
break;
case 8:
LED_COM1 = 1;
LED_COM2 = 1;
LED_COM3 = 1;
LED_COM4 = 1;
LED_COM5 = 1;
LED_COM6 = 1;
LED_COM7 = 1;
LED_COM8 = 0;
P3 = *(p + 7);
break;
default:
break;
}
}
```
以上是使用Keil5编写STC单片机74hc164驱动8位数码管动态显示的C语言代码,具体实现方式可能会有所不同,仅供参考。
阅读全文