在五一单片机控制的数码管,用c语言让他开始计时并在15暂停计时
时间: 2023-06-17 22:03:55 浏览: 62
下面是一个简单的示例代码,实现了在单片机控制的数码管上计时,并在15秒后暂停计时:
```
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DIO = P1^0; // 数码管数据线
sbit CLK = P1^1; // 数码管时钟线
uchar code num[10] = { // 数码管显示0-9的编码
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f // 9
};
uint count = 0; // 计时变量
void delay(uint t) { // 延时函数,t为延时的时间(毫秒)
uint i, j;
for (i = t; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void writeData(uchar dat) { // 写入数码管的数据
uchar i;
for (i = 0; i < 8; i++) {
DIO = dat & 0x01;
dat >>= 1;
CLK = 1;
CLK = 0;
}
}
void display(uchar n) { // 在数码管上显示数字n
writeData(num[n/10]);
writeData(num[n%10]);
}
void main() {
TMOD = 0x01; // 定时器0工作在模式1,16位定时器
TH0 = 0xfc; // 定时器初值,1ms定时
TL0 = 0x67;
TR0 = 1; // 启动定时器0
while (1) {
display(count/10);
delay(5);
display(count%10);
delay(5);
count++; // 计时器加一
if (count == 15000) { // 如果计时器达到15秒
TR0 = 0; // 关闭定时器0
while (1); // 死循环,程序暂停
}
}
}
```
该代码使用了定时器0来计时,每1ms触发一次定时器中断。在中断中,计时器加一,当计时器达到15秒时,关闭定时器0,程序进入死循环,暂停计时。在主函数中,每隔10毫秒更新一次数码管的显示。