搜索
您的当前位置:首页单片机定时器程序

单片机定时器程序

来源:智榕旅游


实验十一 定时器实验三

一、 实验要求

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Top