📄 digitalscanningsubroutine.txt
字号:
/*************************************************************************
半小时的倒计时程序,四位数码管扫描子程序
***************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint shu;//因为定时四位数最多可以定时9999秒,所以要定义uint型的变量
uchar tt;
uchar code leddata[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off 字型码
void delay(uint z);//延时程序声明
void xianshi();//显示子程序声明
void main()//进入主程序
{
shu=1800;//倒计时初值(开始时间),单位秒。1800秒=1分钟(60秒)X30分=半小时。:)
tt=0;
EA=1; //开主中断
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256; //高8位装入65536-50000对256求莫的数值
TL0=(65536-50000)%256; //低8位装入65536-50000对256求余的数值
ET0=1;//开中断0
TR0=1;//运行控制位,为1时T0开始工作,为0时T0停止工作
while (1)
{
xianshi();//调用显示子程序
}
}
//中断服务程序//定时器服务程序
void exter0() interrupt 1 //和中断写法一样,最后的标号不同。1和3是计数器/定时器;0和2是外部中断。
{
TH0=(65536-50000)/256;//高8位装入65536-50000对256求莫的数值
TL0=(65536-50000)%256;//低8位装入65536-50000对256求余的数值
tt++;//定时器计时到了就给tt+1
}
/**************延时程序***************/
void delay(uint z)//延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=11;y>0;y--);
}
/****四位数码管扫描显示子程序*********/
void xianshi()//显示子程序
{
uchar qian,bai,shi,ge;//定义四个变量qian,bai,shi,ge。
qian=shu/1000;//千位显示的是shu对1000求莫
bai=shu%1000/100;//百位
shi=shu%100/10;
ge=shu%10;
P2=0xef; //开千位位选 11101111
P0=leddata[qian];//千位段码
delay(2);//延时
P0=0xff;//消隐
P2=0xdf; //开百位 11011111
P0=leddata[bai];
delay(2);
P0=0xff;//消隐
P2=0xbf; //10111111
P0=leddata[shi];
delay(2);
P0=0xff;//消隐
P2=0x7f;
P0=leddata[ge];
delay(2);
P0=0xff;//消隐
if(tt==20)//如果tt等于20(定时器定时1秒)就给tt清零并给shu减一。
{
tt=0;
shu--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -