在c51单片机里,用p24和p25两个数码管写一个60秒计时器
时间: 2024-04-30 09:19:59 浏览: 14
以下是C语言代码,实现用P24和P25两个数码管显示一个60秒计时器:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit P24=P2^0;
sbit P25=P2^1;
uchar num[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; // 数码管0-9显示的编码,0x00为不显示
uint cnt = 0; // 计时器计数器
void delay(uint xms) // 延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
while(1)
{
cnt++; // 每循环一次计数器加1
if(cnt >= 6000) // 计数器达到6000时,即60秒,清零
{
cnt = 0;
}
P24 = 0; // 选择第一个数码管
P25 = 1;
LSA = 0;
LSB = 0;
LSC = 0;
P0 = num[cnt/1000]; // 显示千位
delay(5);
P24 = 1; // 选择第二个数码管
P25 = 0;
LSA = 1;
LSB = 0;
LSC = 0;
P0 = num[cnt%1000/100]; // 显示百位
delay(5);
P24 = 0; // 选择第一个数码管
P25 = 1;
LSA = 0;
LSB = 1;
LSC = 0;
P0 = num[cnt%100/10]; // 显示十位
delay(5);
P24 = 1; // 选择第二个数码管
P25 = 0;
LSA = 1;
LSB = 1;
LSC = 0;
P0 = num[cnt%10]; // 显示个位
delay(5);
}
}
```
在此代码中,使用了一个计时器计数器cnt,每循环一次就加1,表示经过了1毫秒的时间。当cnt达到6000时,即经过了60秒,就将计数器清零,重新开始计时。在每次循环中,根据计数器的值,依次显示千位、百位、十位和个位的数码。delay函数是用来进行延时的,因为数码管需要一定的时间才能刷新显示。其中LSA、LSB和LSC是选择数码管相应的位,P24和P25是选择数码管的控制引脚,num数组存储了数码管0-9的编码。