这个便是前面的进程的一个归纳定时器T0操控流水灯,T1操控时刻,经过数码管显现出来。
代码如下:
//Led流水灯,五位数码管100000秒计时
#include //头文件
#include //循环左旋函数地点头文件
#define uint unsigned int //宏界说无符号整形
#define uchar unsigned char //宏界说无符号字符型
sbit weixuan=P2^7; //声明P2.7为位选端口
sbit duanxuan=P2^6; //声明P2.6为段选端口
uint number1,number2,aa,number; //number1:T0计满次数;number2:T1计满次数;number:显现的秒数;aa:P0端口显现赋值
uint no1,no2,no3,no4,no5; //别离代表五个数码管显现的数字(字符断码数字序号)
void delay(uint); //声明延时函数
void display(uint,uint,uint,uint,uint); //声明数码管显现函数
uchar code table[]={ //字符断码
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //C言语编码界说
void main() //主函数进口
{
aa=0xfe; //aa初始化,点亮榜首的LED
//定时器初始化
TMOD=0x11; //TMOD赋值,确认T0/T1工作方法
TH0=(65536-46080)/256;//TH0/TL0;TH1/TL1核算初值
TL0=(65536-46080)%6;
TH1=(65536-46080)/256;
TL1=(65536-46080)%6;
EA=1; //总中止翻开
ET0=1; //开T0/T1中止
ET1=1;
TR0=1; //TR0/TR1置位,发动定时器
TR1=1;
while(1) //不行少的大循环
{
display(no1,no2,no3,no4,no5); //数码管显现
}
}
//延时函数主体
void delay(uint s)
{
uint i,j;
for(i=s;i>0;i–)
{
for(j=110;j>0;j–)
{
}
}
}
//显现数码管显现函数主体
void display(uint no1,uint no2,uint no3,uint no4,uint no5) //数码管显现函数主体
{
//数码管1显现 ①送断码;②挑选要显现数码管
duanxuan=1; //翻开段选锁存器
P0=table[no5]; //送断码
duanxuan=0; //封闭(锁住)锁存器
P0=0xff; //必不行少的清屏
weixuan=1; //翻开位选锁存器
P0=0xfe; //挑选数码管
weixuan=0; //封闭锁存器
delay(2); //延时
//数码管2显现
duanxuan=1;
P0=table[no4];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=0xfd;
weixuan=0;
delay(2);
//数码管3显现
duanxuan=1;
P0=table[no3];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=0xfb;
weixuan=0;
delay(2);
//数码管4显现
duanxuan=1;
P0=table[no2];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=0xf7;
weixuan=0;
delay(2);
//数码管5显现
duanxuan=1;
P0=table[no1];
duanxuan=0;
P0=0xff;
weixuan=1;
P0=0xef;
weixuan=0;
delay(2);
}
//定时器T0方法一中止服务程序
void T0_time_no1() interrupt 1
{
TH0=(65536-46080)/256; //预装初始值
TL0=(65536-46080)%6;
number1++; //number1判别计满次数,4次为200ms
if(number1==4)
{
number1=0;
aa=_crol_(aa,1); //循环左旋函数,把aa左旋之后赋值给aa
P1=aa; //P1显现流水灯
}
}
//定时器T1方法一中止服务程序
void T1_time_no1() interrupt 3
{
TH1=(65536-46080)/256; //预装初始值
TL1=(65536-46080)%6;
number2++; //用于判别T1计满次数
if(number2==4) //number2=20,便是1s时刻
{
number2=0;
number++; //用于装总数字
no5=number/10000; //把一个5位数分离出来给五个数码管显现
no4=number000/1000;
no3=number00/100;
no2=number0/10;
no1=number;
if(number==1000000) //到达最大值100000,重新开始计时
{
number=0;
}
}
}
以上,完毕。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/259176.html