定时器1,工作方式1,一个数码管以1.5s,显示2-3-2-3
时间: 2023-05-26 22:04:39 浏览: 90
定时器实现码表(数码管显示)
5星 · 资源好评率100%
下面给出一个简单的示例代码,使用定时器1工作在工作方式1下,以1.5s间隔切换数码管显示2和3:
```c
#include<reg51.h>
#include<intrins.h>
sbit P2_0=P2^0; // 数码管段A
sbit P2_1=P2^1; // 数码管段B
sbit P2_2=P2^2; // 数码管段C
sbit P2_3=P2^3; // 数码管段D
sbit P2_4=P2^4; // 数码管段E
sbit P2_5=P2^5; // 数码管段F
sbit P2_6=P2^6; // 数码管段G
sbit P2_7=P2^7; // 数码管DP
sbit P3_0=P3^0; // 数码管位选1
sbit P3_1=P3^1; // 数码管位选2
unsigned char code digit[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 数码管显示0-9
void delay(unsigned int k) // 延时函数,不同的晶振需要根据实际情况进行调整
{
unsigned int i, j;
for(i=0;i<k;i++)
for(j=0;j<120;j++); // 这里的120需要根据实际情况进行调整
}
void main()
{
unsigned char i=0;
TMOD=0x10; // 定时器1工作在工作方式1
TH1=0x00; // 定时器1初值
TL1=0x00;
P3_0=1; // 数码管位选1默认为高电平
P3_1=0; // 数码管位选2默认为低电平
while(1)
{
if(TF1==1) // 定时器1溢出中断标志位
{
TF1=0; // 清除定时器1溢出中断标志位
TH1=0x4c; // 定时器1重新赋初值,1.5s后溢出
TL1=0x00;
if(i==0) // 判断当前应该显示的数字是2还是3
{
P2=digit[2]; // 数字2
P3_0=0;
P3_1=1; // 数码管位选2置高,位选1置低
}
else if(i==1)
{
P2=digit[3]; // 数字3
P3_0=1;
P3_1=0; // 数码管位选1置高,位选2置低
}
i++;
if(i==2)
i=0;
}
}
}
```
阅读全文