实验十一 定时器实验三
一、 实验要求
1. 将P2口和四个数码管的数据口相连,P1口和位选线相连接,电路用共阳极;
2. 数码管显示4位从前两位分钟、后两位为秒;分钟和秒的值从00到59增加;
3. 实现定时器1S的定时,每1S时间到时,使秒钟加一,当秒钟为60时,显示为00秒,分钟加一;当分钟为60时,显示为00分,从新开始一个小时的计时。
#include #define SEG7P P2 //定义数码管就接口在P2口 #define SCANP P1 //定义P3口为数码管位选口 unsigned char TAB[]={ 0xc0,0xf9,0xa4,0xb0,0x99, //数字0~4的码值 0x92,0x83,0xf8,0x80,0x98 }; //数字5~9的码值 unsigned int show_s,show_m; show_m //定义变量show_s, void Get_disp(char show_s1,char show_m1); //声明赋值函数 void Display(); //声明显示函数 void delay_ms(int x); //声明延时函数 char disp[4]; //定义显示数字数组 char scan[4]={0xfe,0xfd,0xfb,0xf7}; //定义位选扫描数组 main() //主程序的开始 { SEG7P=0xff; //赋初值关闭数码管 IE=0x82; //开启中断总开关和定时器0开关 TMOD=0x01; //设置模式为1 TR0=1; //开启定时器0 TH0=(65535-50000)/256; //设置定时器初值,计数高八位 TL0=(65535-50000)%256; //计数低八位 while(1) //无穷循环 { Get_disp(show_s,show_m); //调用赋值函数 Display(); //调用显示函数 } } /*****定时器0中断子函数*****/ void TF_0(void) interrupt 1 { int T; TH0=(65535-50000)/256; TL0=(65535-50000)%256; T++; if(T==20) //重新转载定时器的初值 //计数自增 //判断T { T=0; //T回到初值 show_s++; //秒自增 if(show_s>=60) { show_s=0; show_m++; if(show_m>=60) show_m=0; } } } /*****disp数组赋值函数*****/ //秒计到60 //秒回到0 //分自增 void Get_disp(char show_s1,char show_m1) { disp[0]=show_m1/10; //显示千位 disp[1]=show_m1%10; disp[2]=show_s1/10; disp[3]=show_s1%10; } /*****显示函数*****/ void Display() { char i; for(i=0;i<4;i++) { //显示百位 //显示十位 //显示个位 //声明延迟函数 //声明变量 //for语句开始 SCANP=scan[i]; //扫描位选 SEG7P=TAB[disp[i]]; //赋值到数码管 delay_ms(5); //延时5ms } } /******延时函数******/ void delay_ms(int x) //延迟函数开始 因篇幅问题不能全部显示,请点此查看更多更全内容