写一段51单片机数码管自动999累加的代码
时间: 2023-12-01 13:22:52 浏览: 56
好的,以下是一段基于51单片机的数码管自动999累加代码:
```
#include <reg52.h>
sbit DIO = P2^0; // 数码管数据线
sbit CLK = P2^1; // 数码管时钟线
sbit CS = P2^2; // 数码管片选线
unsigned int cnt = 0; // 计数器
void delay(unsigned int xms) // 延时函数
{
unsigned int i, j;
for (i = xms; i > 0; i--)
for (j = 112; j > 0; j--);
}
void display(unsigned int num) // 数码管显示函数
{
unsigned int i = 0;
unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f}; // 数码管显示表
unsigned char buffer[3] = {0}; // 三位数码管缓存
buffer[0] = table[num / 100]; // 百位
buffer[1] = table[num % 100 / 10]; // 十位
buffer[2] = table[num % 10]; // 个位
for (i = 0; i < 3; i++) // 循环三次
{
CS = 0; // 片选有效
DIO = buffer[i]; // 发送数据
CLK = 1; // 时钟上升沿
CLK = 0; // 时钟下降沿
}
CS = 1; // 片选无效
}
void main()
{
while (1)
{
cnt++; // 计数器加1
if (cnt == 1000) // 达到999时清零
cnt = 0;
display(cnt); // 显示计数器
delay(10); // 延时10毫秒
}
}
```
该代码使用了一个计数器变量 `cnt`,在一个无限循环中,每次循环 `cnt` 加1,当 `cnt` 达到999时清零。在每次循环中,调用 `display()` 函数将计数器显示在数码管上,并延时10毫秒,以使数码管显示结果能够被人类观察到。