基于51單片機的出租車計價器,有兩個獨立按鍵一個是運行/停止按鍵另一個是停止時清零的按鍵
task.gif (3.86 MB, 下載次數: 40)
下載附件
2017-12-7 00:02 上傳
0.png (8.15 KB, 下載次數: 39)
下載附件
2017-12-7 00:18 上傳
單片機源程序如下:
- #include<reg52.h>
- #include"nokia5110.h"
- #include"ds1302.h"
- unsigned int distance=0;
- unsigned char S1_flag=0;
- unsigned int price=0;
- sbit S1=P3^2;//定義按鍵
- sbit S2=P3^3;
- void delay_ms(unsigned char ms)//延時k ms
- {
- unsigned char i,j;
- for(i=0;i<ms;i++)
- for(j=0;j<110;j++);
- }
- void Int_Init(void)//外部中斷初始化
- {
- IT0=1;
- EX0=1;
-
- IT1=1;
- EX1=1;
- PT1=1;
- EA=1;
- }
- void Timer0_Init(void) //定時器0初始化
- {
- TMOD|=0X05;
- TH0=(65536-10)/256;
- TL0=(65536-10)%256;
- ET0=1;
- TR0=1;
- EA=1;
- }
- void Price_caculate(void)//價格計算 根據距離和起步價
- { if(distance==0)price=0;
- else if(distance<300)price=50;
- else if(distance<1000){price=(distance-300)*0.5+50;}
- else if(distance<2000){price=190+(distance-1000)*0.3;}
- else {price=340+(distance-2000)*0.1;}
- }
- void Key_Handler(void)//按鍵處理
- {
- if(S1_flag==0){TR0=0;}
- else if(S1_flag==1){TR0=1;S1_flag++;distance=0;}
- }
- void nokia5110_defaultshow(void)//顯示屏固定顯示
- {
- LCD_write_hanzi(0,0,0);
- LCD_write_hanzi(2,0,1);
- LCD_write_char(4,0,':');
- LCD_write_shu(7,0,10);
- LCD_write_char(10,0,'K');
- LCD_write_char(12,0,'M');
-
- LCD_write_hanzi(0,2,2);
- LCD_write_hanzi(2,2,3);
- LCD_write_char(4,2,':');
- LCD_write_shu(8,2,10);
- );
- }
- void show_time(void)//顯示時間及計價器運行狀態
- {
- LCD_write_shu(0,4,TIME[2]/16);
- LCD_write_shu(1,4,TIME[2]%16);
- LCD_write_char(2,4,':');
- LCD_write_shu(3,4,TIME[1]/16);
- LCD_write_shu(4,4,TIME[1]%16);
- LCD_write_char(5,4,':');
- LCD_write_shu(6,4,TIME[0]/16);
- LCD_write_shu(7,4,TIME[0]%16);
- if(S1_flag==0)
- {
- LCD_write_char(10,4,'O');
- LCD_write_char(11,4,'F');
- LCD_write_char(12,4,'F');
- }else
- {
- LCD_write_char(10,4,'O');
- LCD_write_char(11,4,'N');
- LCD_write_char(12,4,' ');
- }
- }
- void main()
- {
- LCD_init();
- //Ds1302Init();
- LCD_clear();
- Timer0_Init();
- Int_Init();
- //
- nokia5110_defaultshow();
- while(1)
- {
- LCD_write_shu(5,0,distance/1000%10);//顯示距離
- LCD_write_shu(6,0,distance/100%10);
- LCD_write_shu(8,0,distance/10%10);
- LCD_write_shu(9,0,distance%10);
-
- LCD_write_shu(5,2,price/1000%10);//顯示價格
- LCD_write_shu(6,2,price/100%10);
- LCD_write_shu(7,2,price/10%10);
- LCD_write_shu(9,2,price%10);
- Key_Handler();//按鍵處理
- Price_caculate();//價格計算
- Ds1302ReadTime();//讀取ds1302時間 存放在數組TIME[];
- show_time();//顯示時間及計價器狀態
- }
- }
- void Timer0(void) interrupt 1//里程中斷 計數器模式
- {
- TH0=(65536-10)/256;
- TL0=(65536-10)%256;
- distance++;
-
- }
- void Int0() interrupt 0//按鍵中斷
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
出租車計價器.rar
(127.09 KB, 下載次數: 139)
2017-12-7 00:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|