两位数码管30秒倒计时c语言,基于51单片机共阴两位数码管显示倒计时
时间: 2023-08-19 16:05:01 浏览: 142
基于51单片机倒计时器秒表定时器数码管显示设计.zip
5星 · 资源好评率100%
好的,以下是基于51单片机的共阴两位数码管显示30秒倒计时的C语言代码:
```c
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
sbit DIO = P2^0;
sbit CLK = P2^1;
void delay(uint x) // 延时函数
{
uint i, j;
for(i = x; i > 0; i--)
for(j = 110; j > 0; j--);
}
void WriteData(uchar dat) // 写入数据函数
{
uchar i;
for(i = 8; i > 0; i--)
{
CLK = 0;
DIO = dat & 0x01;
dat >>= 1;
CLK = 1;
}
}
void WriteCmd(uchar cmd) // 写入命令函数
{
uchar i;
for(i = 8; i > 0; i--)
{
CLK = 0;
DIO = cmd & 0x01;
cmd >>= 1;
CLK = 1;
}
}
void Init() // 初始化函数
{
WriteCmd(0x38);
WriteCmd(0x0c);
WriteCmd(0x06);
WriteCmd(0x01);
}
void Display(uchar num) // 显示函数
{
switch(num)
{
case 0: WriteData(0xc0); break;
case 1: WriteData(0xf9); break;
case 2: WriteData(0xa4); break;
case 3: WriteData(0xb0); break;
case 4: WriteData(0x99); break;
case 5: WriteData(0x92); break;
case 6: WriteData(0x82); break;
case 7: WriteData(0xf8); break;
case 8: WriteData(0x80); break;
case 9: WriteData(0x98); break;
default: break;
}
}
void main()
{
uchar second = 30;
Init();
while(1)
{
LSA = 0; LSB = 0; LSC = 0; // 第一位数码管
Display(second / 10);
delay(2);
LSA = 1; LSB = 0; LSC = 0; // 第二位数码管
Display(second % 10);
delay(2);
if(--second == 0) // 倒计时结束
{
WriteCmd(0x01); // 清屏
while(1); // 停止运行
}
}
}
```
该代码使用了共阴两位数码管进行倒计时显示。程序启动后,会显示30秒,然后每秒数码管上的数字减一,直到倒计时结束(0秒)。在倒计时结束后,会清屏并停止运行。
阅读全文