stc89c52流水灯和数码管组合编程
时间: 2024-02-24 11:56:27 浏览: 116
以下是STC89C52单片机的流水灯和数码管组合编程示例代码:
```c
#include <reg52.h> // 包含STC89C52的头文件
sbit DS = P2^0; // 数码管串行数据输入引脚
sbit STCP = P2^1; // 数码管锁存控制引脚
sbit SHCP = P2^2; // 数码管移位控制引脚
sbit LED1 = P1^0; // LED1引脚
sbit LED2 = P1^1; // LED2引脚
sbit LED3 = P1^2; // LED3引脚
sbit LED4 = P1^3; // LED4引脚
unsigned char code LedChar[] = { // 数码管显示字符的编码表
0xc0, // 0
0xf9, // 1
0xa4, // 2
0xb0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xf8, // 7
0x80, // 8
0x90 // 9
};
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 10; j++);
}
void send_data(unsigned char dat) // 发送数据到数码管
{
unsigned char i;
for (i = 0; i < 8; i++) // 依次发送8位二进制数据
{
DS = (dat & 0x80) >> 7; // 取出最高位,放到数据线上
dat <<= 1; // 左移一位,准备发送下一位数据
SHCP = 0; // 移位控制引脚置低
SHCP = 1; // 移位控制引脚置高,将数据线输入到移位寄存器中
}
STCP = 0; // 锁存控制引脚置低
STCP = 1; // 锁存控制引脚置高,将移位寄存器中的数据输出到数码管中
}
void main()
{
unsigned char i;
while (1)
{
LED1 = 0; delay(10000); // LED1亮,延时
LED1 = 1; LED2 = 0; delay(10000); // LED2亮,延时
LED2 = 1; LED3 = 0; delay(10000); // LED3亮,延时
LED3 = 1; LED4 = 0; delay(10000); // LED4亮,延时
LED4 = 1; // LED4亮
for (i = 0; i < 10; i++) // 数码管依次显示0~9
{
send_data(LedChar[i]);
delay(50000);
}
}
}
```
该程序实现了四个LED灯的流水灯效果,同时数码管依次显示0~9。其中,数码管通过74HC595移位寄存器控制,LED灯通过P1口控制。该程序需要注意的是,在数码管显示时需要依次发送每个数字的编码,同时需要添加适当的延时,以便数码管能够正确显示。
阅读全文