单片机设计倒计时器
- 格式:doc
- 大小:36.50 KB
- 文档页数:7
单片机课程设计实验实验课程题目:倒计时器
班级:
姓名:
学号:
一、实验目的:
学习JD51单片机定时器时间计时处理、按键扫描及LED数码管显示的设计方法。
二、设计要求:
设计一个倒计时器,用数码管显示剩余时间,通电后显示初始值10.00表示设定初始值为10分钟,按开始/取消按钮(K4开关键)开始倒计时,再次按开始/取消按钮(K4开关键)则复位到10.00;复位后可按时间调整按钮(K1与K2开关键)调整倒计时的初始时间,当数码管显示00.00时蜂鸣响6声。
三、程序设计:
#include
#define uchar unsigned char
#define uint unsigned int
uchar Count = 0;
uint fs=0;
sbit BELL = P2^4; //设置P2.4口,为控制蜂鸣器发声的引脚
sbit K1 = P3^2;
sbit K2 = P3^3;
sbit K3 = P3^5;
uchar min = 10 ;
uchar sec = 0 ;
uchar ws[4] = {0x01,0x02,0x04,0x08};
uchar table[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管的段码编码 (0-9)
uchar table_d[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带点数码管的段码编码 (0-9)
void delay(void) //误差 0us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=7;a>0;a--);
}
void Delay(uint del) // 延时子程序,延时时间为 1ms * del { uint x,j;
for(j=0;j for(x=0;x<=148;x++); } void Delay2(uint m) { while(--m); } void beep(uint n) //蜂鸣器响N次 { uint i; for(i=0;i { BELL=0; Delay2(10000); BELL=1; Delay2(10000); } } void Time0_Init() //初始化定时器 11.0592M 50ms { EA = 1 ; TMOD = 0x01; TH0= 0x4E; TL0=0x58; TR0 = 0; ET0 = 1; } void time0() interrupt 1 /*定时器0中断程序*/ { TH0= 0x4E; TL0=0x58; if (Count == 20) { Count = 0; if(sec == 0) { if(min == 0) { min = 10; } else min--; sec = 59; } else sec--; } else Count++; if(min==0&&sec==0) /*调用蜂鸣器程序*/ { beep(3); min=0; sec=0;TR0=0; } } void display(void) //数码管每位动态显示{ P2 = 0xfe; P0 = table[min/10]; Delay(2); P2 = 0xfd; P0 = table_d[min%10]; Delay(2); P2 = 0xfb; P0 = table[sec/10]; Delay(2); P2 = 0xf7; P0 = table[sec%10]; Delay(2); P2=0xf0; delay(); } void key1() //按键功能函数 { if(K1==0||K2==0||K3==0) //判断是否有按键按下 { display(); /*调用显示函数*/ if(K3==0) { if(K3==0) { if(fs==0) /*如果K3按下判定如果fs为0,开始计时*/ { TR0 = 1; } else /*如果fs为1,计时器复位*/ { min=10; sec=0; TR0=0; } while(!K3) ; /*按键消抖,每按一次只执行一次*/ Delay(10); while(!K3) ; fs=(!fs); } } else if (K1==0) /*按键K1判定函数*/ { if(K1==0) { if(TR0!=1) { min++; if(min==100) { min=0; } while(!K1); /*按键K1消抖*/ delay(); while(!K1); } } } else /*按键K2判定函数*/ { display(); /*调用显示函数*/ if(K2==0) { if(TR0!=1) { min--; } if(min==-1)