数码管1秒定时中断的c语言,用单片机c语言,c51的,使用数码管设计一个60秒倒计时系统,使用两个数码管,要求用定时器中断定时1秒。 仿...
时间: 2024-02-12 16:07:12 浏览: 79
以下是使用单片机C语言(C51)实现数码管1秒定时中断的代码:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
// 数码管对应的端口定义
sbit dula = P2 ^ 6;
sbit wela = P2 ^ 7;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
}; // 数码管显示数字的编码
// 定时器中断处理函数
void timer0() interrupt 1 {
static uint cnt = 0; // 静态变量,用于计数
TH0 = (65536 - 50000) / 256; // 重新赋值
TL0 = (65536 - 50000) % 256;
cnt++;
if (cnt == 1000) { // 计满1秒
cnt = 0;
// 在这里进行数码管的显示操作
}
}
void main() {
TMOD = 0x01; // 定时器0,模式1
TH0 = (65536 - 50000) / 256; // 定时器初值赋值
TL0 = (65536 - 50000) % 256;
EA = 1; // 开总中断
ET0 = 1; // 开定时器0中断
TR0 = 1; // 启动定时器0
while (1) {}
}
```
接下来是使用单片机C语言(C51)实现60秒倒计时系统的代码:
```c
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
// 数码管对应的端口定义
sbit dula = P2 ^ 6;
sbit wela = P2 ^ 7;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
}; // 数码管显示数字的编码
// 定时器中断处理函数
void timer0() interrupt 1 {
static uint cnt = 0; // 静态变量,用于计数
TH0 = (65536 - 50000) / 256; // 重新赋值
TL0 = (65536 - 50000) % 256;
cnt++;
if (cnt == 1000) { // 计满1秒
cnt = 0;
static uint time = 60; // 静态变量,用于记录剩余时间
if (time > 0) {
time--; // 剩余时间减1
uchar shiwei = time / 10; // 十位数字
uchar gewei = time % 10; // 个位数字
dula = 1; // 先关闭数码管
wela = 0; // 打开第一个数码管
P0 = table[shiwei]; // 显示十位数字
wela = 1; // 关闭第一个数码管
wela = 0; // 打开第二个数码管
P0 = table[gewei]; // 显示个位数字
wela = 1; // 关闭第二个数码管
}
}
}
void main() {
TMOD = 0x01; // 定时器0,模式1
TH0 = (65536 - 50000) / 256; // 定时器初值赋值
TL0 = (65536 - 50000) % 256;
EA = 1; // 开总中断
ET0 = 1; // 开定时器0中断
TR0 = 1; // 启动定时器0
while (1) {}
}
```
这个代码可以实现60秒倒计时,每秒钟数码管上的数字会减1,直到显示完毕。
阅读全文