徐海学院2008级单片机系统设计报告 第8页
启动 正常显示99 1秒减一 到00 停止
正常显示流程图
正常显示程序
#include
#define uchar unsigned char #define uint unsigned int
#define Font_code XBYTE[0xefff] //#define reg_code XBYTE[0xdfff] //#define key_addr XBYTE[0xf7ff] //bit x=0; bit y=0; uchar key_n; uint m; uint s; sbit P12=P1^0;
unsigned char const jian[];
字符码写地址 字位码写地址 读按键地址 徐海学院2008级单片机系统设计报告 第9页
unsigned char const
dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
void delay(uchar x) { }
void main(void) {
uint p,t,l; RCAP2H=0x10; RCAP2L=0x00; m=99; while(1) {
get_key(); if(key_n==14) { }
if(key_n==13) {
if((s%2)!=0) { x=1; y=0; m=99; uchar i; while(x--)
for(i=0;i<100;i++);
0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
徐海学院2008级单片机系统设计报告 第10页
}
}
if(key_n==12) { delay(3); if(key_n==12) {
if((s%2)==0) { TR2=1; ET2=1; EA=1;
}
if((s%2)!=0) { TR2=0; ET2=0; EA=0; } }
} if(m==0) { TR2=0; ET2=0;
EA=0; } p=m/10; t=m;
Font_code=dofly[p] reg_code=0x20;
;
徐海学院2008级单片机系统设计报告 第11页
}
delay(10);
Font_code=dofly[t] ; reg_code=0x40; delay(10); }
timer2() interrupt 5 { }
3.3.3 按键判断
a.按 13--数码管显示停止
b.按下S14键,可以设置秒数,按键S1-S10分别对应数字0-9;先输入数字为十位数,后输入数字为个位数,若输入数字大于99,数码管显示“99”。按下S13键启动计时。
c. 按键S15,当S15按下时,数码管显示为“99”,秒表从新开始计时。
按键程序:
void get_key(void)
{ uchar temp; Font_code=0x00; reg_code=0xfe;
static uchar t; TF2=0; t++; if(t==10) { }
t=0; if(m!=0) { m--; }
徐海学院2008级单片机系统设计报告 第12页
temp = key_addr & 0x0f; //第一列 if(temp==0x0e)
{
delay(200); if(temp==0x0e) {
key_n=0; if((x==1)&&(y==0) ) } }
if(temp==0x0d) { delay(200); if(temp==0x0d) { key_n=4;
if((x==1)&&(y==0))
{m=m+40;y=1;} else
{m=m;y=1;} else
{m=(m/10)*10;y=0;}
{m=(m/10)*10+4;y=0;} } }
if(temp==0x0b) { delay(200); if(temp==0x0b) {
key_n=8; }
if((x==1)&&(y==0)) {m=m+80;y=1;} else
{m=(m/10)*10+8;y=0;}
}
if(temp==0x07) { key_n=12;
s++;