单片机定时器程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十一定时器实验三

一、实验要求

1.将P2口和四个数码管的数据口相连,P1口和位选线相连接,电路用共阳极;

2.数码管显示4位从前两位分钟、后两位为秒;分钟和秒的值从00到59增加;

3.实现定时器1S的定时,每1S时间到时,使秒钟加一,当秒钟为60时,显示为00

秒,分钟加一;当分钟为60时,显示为00分,从新开始一个小时的计时。

#include //定义8051寄存器头文件

#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_s,show_m 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) //秒计到60

{

show_s=0; //秒回到0

show_m++; //分自增

if(show_m>=60)

show_m=0;

}

}

}

/*****disp数组赋值函数*****/

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) //延迟函数开始

相关文档
最新文档