南昌航空大学《单片机与接口技术》课程设计
//显示的辅助程序,分离一个数的各个数字
void fenli(uint temp) //数据的分离处理 { if(temp>9999) temp=0; qianwei=temp/1000; baiwei=temp/100; shiwei=temp/10; gewei=temp; }
//延时约1ms,数码管显示时使用 void diplay_delay() {
uchar i;
for(i=0;i<240;i++); }
//显示程序; void led_show() { //-----显示路程或者等待时间---- if(key1_flag) fenli(distance); else { fenli(wait); } wela=1; P0=0xfe; wela=0; dula=1; P0=led_seg_code[qianwei]; delay(1); dula=0; wela=1; P0=0xfd; wela=0; dula=1; P0=led_seg_code[baiwei]; //如果是路程,点亮小数点儿 delay(1); dula=0; wela=1;
21
南昌航空大学《单片机与接口技术》课程设计
P0=0xfb; wela=0; dula=1;
if(key1_flag)P0=led_seg_code[shiwei]; else P0=led_seg_code[shiwei]|0x80; delay(1); dula=0; wela=1; P0=0xf7; wela=0; dula=1;
P0=led_seg_code[gewei]; delay(1); dula=0;
//-----显示价格---- fenli(cost); wela=1; P0=0xef; wela=0; dula=1;
P0=led_seg_code[qianwei]; delay(1); dula=0; wela=1; P0=0xdf; wela=0; dula=1;
P0=led_seg_code[baiwei]; delay(1); dula=0; wela=1; P0=0xbf; wela=0; dula=1;
P0=led_seg_code[shiwei]|0x80; delay(1); dula=0; wela=1; P0=0x7f; wela=0; dula=1;
P0=led_seg_code[gewei]; delay(1);
22
南昌航空大学《单片机与接口技术》课程设计
dula=0; }
//键盘的扫描 void keyscan()
{ if(key1==0) // 按键消抖并判断按下去的次数为基数还是偶数 { delay(5); if(key1==0) key1_flag=!key1_flag; } if(key0==0) // 清零 { delay(5); if(key0==0) initial_data(); } /* if(key3==0) // 暂停 { delay(5); if(key3==0) { //key3_flag=!key3_flag; zanting(); } }*/ zanting(); if(key2==0) // 单程还是往返 { delay(5);
if(key2==0) key2_flag=!key2_flag; } if(key4==0) { delay(5); if(key4==0) key4_flag=!key4_flag; } if(key5==0) { delay(5); if(key5==0)
23
南昌航空大学《单片机与接口技术》课程设计
key5_flag=!key5_flag; } //指示等扫描 led1=!key2_flag; // 指示,单程还是往返,灯低电平点亮; 往返亮; led2=key3_flag; // 指示,暂停时亮; led3=flag; // 指示是否等待; led4=key1_flag; //切换指示,显示路程还是等待时间; diplay_delay(); }
//定时器初始化 void initial_time() { TMOD=0x15; TH0=(65535-50)/256; TL0=(65535-50)%6; TH1=(65535-10000)/256; TL1=(65535-10000)%6; IE=0x8a; IT0=1; //外部边沿触发方式 TR0=1; IT1=1; TR1=1; }
// 中断记录脉冲数
//********* 定时器 ********
void time0() interrupt 1 //定时0 计数 { TH0=(65535-50)/256; //50次 TL0=(65535-50)%6; tt++; }
void time1() interrupt 3 { TH1=(65535-20000)/256; TL1=(65535-20000)%6; a++; a++; b++; if(b>=1) {
24
南昌航空大学《单片机与接口技术》课程设计
b=0; clk=~clk; } if(a>=100) { a=0; second++; if(second>=60) { second=0; minute++; } } }
//主程序 void main(void) {
initial_data(); initial_time(); while(1) {
keyscan(); jisuan(); led_show(); } }
//初始化数据 //初始化定时器 //扫描显示 25