|
出租車計(jì)價(jià)器(霍爾測(cè)速)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (30.19 KB, 下載次數(shù): 140)
下載附件
2020-3-14 14:39 上傳
單片機(jī)源程序如下:
- //電子時(shí)鐘
- //宏定義
- #define uchar unsigned char
- #define uint unsigned int
- //頭函數(shù)聲明
- #include <reg52.h>
- #include "Lcd.h"
- #include "Data.h"
- #include "DS1302.h"
- #include "AT24C02.h"
- //鍵盤定義
- sbit K1=P3^4; //模式切換
- sbit K2=P3^6; //減按鍵
- sbit K3=P3^5; //加按鍵
- sbit K4=P3^7; //萬(wàn)年歷模式時(shí):設(shè)置時(shí)間信息。計(jì)價(jià)器模式時(shí):設(shè)置單價(jià)
- //模式0時(shí)鐘 1時(shí)鐘調(diào)整
- uchar Mode=0;
- //時(shí)鐘屏幕調(diào)整
- uchar Wei=0;
- uchar SS=0;
- //價(jià)格調(diào)整
- uchar JGWei=0;
- //計(jì)價(jià)器參數(shù)
- uint Day=0;
- uint Night=0;
- uint DanJia=0;
- uint DJ_min=0;
- uint ZJ=0;
- unsigned long GL=0;
- uint Time=0;
- uint count=0;
- uchar m=0;
- //白天/晚上
- uchar DN=0;
- //公里/時(shí)間
- uchar GT=0;
- //初始化函數(shù)
- void InitTimer0();
- //寫初值
- void SETS();
- //讀初值
- void READS();
- //主函數(shù)
- void main()
- {
- //初始化
- Ds1302_Init();
- Init_LCD();
- initeeprom();
- //SETS();
- //讀取初始參數(shù)
- READS();
- //定時(shí)器初始化
- InitTimer0();
- //循環(huán)
- while(1)
- {
- //時(shí)鐘模式
- if(Mode==0)
- {
- //讀時(shí)間
- if(Wei==0)
- {
- Ds1302_Read_Time();
- //顯示時(shí)間
- display_NYR(time_buf1,Wei,0);
- }
- }
- else if(Mode==1)
- {
- if(time_buf1[4]>=23||time_buf1[4]<7)
- DN=1;
- else
- DN=0;
- //顯示計(jì)價(jià)器信息
-
- display_S(Day,Night,DanJia,ZJ,GL/10,Time,GT,DN);
- }
- if(K4==0)
- {
- delay(100);
- //調(diào)時(shí)
- if(Mode==0)
- {
- Wei++;
- if(Wei==1)
- {
- SS=1;
- }
- //閃爍
- display_NYR(time_buf1,Wei,SS);
- if(Wei==7)
- {
- Wei=0;
- //保存時(shí)間
- Ds1302_Write_Time();
- Init_LCD();
- }
- }
- else if(Mode==1)
- {
- JGWei++;
- if(JGWei==1)
- {
- Mode=2;
- //顯示計(jì)價(jià)器價(jià)格
- Init_LCD_JGTZ();
- display_D(Day,Night,DanJia,JGWei,DJ_min);
- }
- }
- else if(Mode==2)
- {
- JGWei++;
- display_D(Day,Night,DanJia,JGWei,DJ_min);
- if(JGWei==5)
- {
- Mode=1;
- JGWei=0;
- //參數(shù)初始化
- //保存
- SETS();
- //讀初值
- READS();
-
- ZJ=0;
- GL=0;
- Time=0;
- //開啟定時(shí)器
- TR0=1;
- //顯示計(jì)價(jià)器
- Init_LCD_JJQ();
- }
- }
- while(K4==0);
- }
- //+
- if(K3==0)
- {
- delay(100);
- //調(diào)時(shí)
- if(Mode==0)
- {
- //年
- if(Wei==1)
- {
- time_buf1[1]++;
- if(time_buf1[1]>=100)
- time_buf1[1]=0;
- }
- //月
- else if(Wei==2)
- {
- time_buf1[2]++;
- if(time_buf1[2]>=13)
- time_buf1[2]=1;
- }
- //日
- else if(Wei==3)
- {
- time_buf1[3]++;
- if(time_buf1[3]>=YDay(time_buf1[1],time_buf1[2])+1)
- time_buf1[3]=1;
- }
- //時(shí)
- else if(Wei==4)
- {
- time_buf1[4]++;
- if(time_buf1[4]>=24)
- time_buf1[4]=0;
- }
- //分
- else if(Wei==5)
- {
- time_buf1[5]++;
- if(time_buf1[5]>=60)
- time_buf1[5]=0;
- }
- //秒
- else if(Wei==6)
- {
- time_buf1[6]++;
- if(time_buf1[6]>=60)
- time_buf1[6]=0;
- }
- //顯示
- if(Wei!=0)
- display_NYR(time_buf1,Wei,SS);
- }
- //調(diào)價(jià)
- else if(Mode==2)
- {
- //單價(jià)
- if(JGWei==1)
- {
- DanJia++;
- if(DanJia>999)
- {
- DanJia=1;
- }
- }
- //等待時(shí)間單價(jià)
- else if(JGWei==2)
- {
- DJ_min++;
- if(DJ_min>999)
- {
- DJ_min=1;
- }
- }
- //夜間
- else if(JGWei==3)
- {
- Night++;
- if(Night>999)
- {
- Night=1;
- }
- }
- //白天
- else if(JGWei==4)
- {
- Day++;
- if(Day>999)
- {
- Day=1;
- }
- }
- display_D(Day,Night,DanJia,JGWei,DJ_min);
- }
- while(K3==0);
- }
- //-
- if(K2==0)
- {
- delay(100);
- //調(diào)時(shí)
- if(Mode==0)
- {
- //年
- if(Wei==1)
- {
- time_buf1[1]--;
- if(time_buf1[1]<0)
- time_buf1[1]=99;
- }
- //月
- else if(Wei==2)
- {
- time_buf1[2]--;
- if(time_buf1[2]<=0)
- time_buf1[2]=12;
- }
- //日
- else if(Wei==3)
- {
- time_buf1[3]--;
- if(time_buf1[3]<=0)
- time_buf1[3]=YDay(time_buf1[1],time_buf1[2]);
- }
- //時(shí)
- else if(Wei==4)
- {
- time_buf1[4]--;
- if(time_buf1[4]<0)
- time_buf1[4]=23;
- }
- //分
- else if(Wei==5)
- {
- time_buf1[5]--;
- if(time_buf1[5]<0)
- time_buf1[5]=59;
- }
- //秒
- else if(Wei==6)
- {
- time_buf1[6]--;
- if(time_buf1[6]<0)
- time_buf1[6]=59;
- }
- //顯示
- if(Wei!=0)
- display_NYR(time_buf1,Wei,SS);
- }
- //調(diào)價(jià)
- else if(Mode==2)
- {
- //單價(jià)
- if(JGWei==1)
- {
- DanJia--;
- if(DanJia==0)
- {
- DanJia=999;
- }
- }
- //等待時(shí)間單價(jià)
- else if(JGWei==2)
- {
- DJ_min--;
- if(DJ_min==0)
- {
- DJ_min=999;
- }
- }
- //夜間
- else if(JGWei==3)
- {
- Night--;
- if(Night==0)
- {
- Night=999;
- }
- }
- //白天
- else if(JGWei==4)
- {
- Day--;
- if(Day==0)
- {
- Day=999;
- }
- }
- display_D(Day,Night,DanJia,JGWei,DJ_min);
- }
- while(K2==0);
- }
- //切換
- if(K1==0)
- {
- delay(100);
- //計(jì)價(jià)器模式
- if(Mode==1)
- {
- Mode=0;
- ZJ=0;
- GL=0;
- Time=0;
- //開啟定時(shí)器
- TR0=0;
- EX0=0;
- //顯示計(jì)價(jià)器
- Init_LCD();
- }
- else if(Mode==0)
- {
- Mode=1;
- //參數(shù)初始化
- //讀初值
- READS();
- ZJ=0;
- GL=0;
- Time=0;
- //開啟定時(shí)器
- m=0;
- TR0=1;
- EX0=1;
- //顯示計(jì)價(jià)器
- Init_LCD_JJQ();
- }
- while(K1==0);
- }
- }
- }
- //初始化函數(shù)
- void InitTimer0(void)
- {
- TMOD = 0x01;
- TH0 = 0x3C;
- TL0 = 0xB0; //10ms
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- IT0=1; //INT0負(fù)跳變觸發(fā)
- EX0=0;//開外部INTO中斷
- }
- //定時(shí)器0中斷10ms
- void Timer0Interrupt(void) interrupt 1
- {
- TH0 = 0x3C;
- TL0 = 0xB0; //賦初值
- m++;
- if(m>=20)
- {
- m=0;
- if(count>=60)
- {
- GT=0;
- GL=GL+count/10;
- count=0;
- }
- else
- {
- count=0;
- GT=1;
- Time++; //時(shí)間++
- }
- }
- //計(jì)算錢數(shù)
- //公里數(shù)小于3
- if(GL<=300)
- {
- if(DN==0)
- {
- if(Time>60)
- ZJ=Day+Time/60*DJ_min;
- else
- ZJ=Day;
- }
- else
- {
- if(Time>60)
- ZJ=Night+Time/60*DJ_min;
- else
- ZJ=Night;
- }
- }
- else
- {
- if(DN==0)
- {
- if(Time>60)
- ZJ=Day+(GL/10-20)/10*DanJia+Time/60*DJ_min;
- else
- ZJ=Day+(GL/10-20)/10*DanJia;
- }
- else
- {
- if(Time>60)
- ZJ=Night+(GL/10-20)/10*DanJia+Time/60*DJ_min;
- else
- ZJ=Night+(GL/10-20)/10*DanJia;
- }
- }
- }
- void EXINT0() interrupt 0
- {
- count++;
- }
- //讀初值
- void READS()
- {
- uchar SH=0,SL=0;
- uint temp=0;
- delay(10);
- SL=read_add(0x01);
- delay(10);
- SH=read_add(0x02);
- temp=SH;
- temp=temp<<8;
- temp=temp+SL;
- Day=temp;
- delay(10);
- SL=read_add(0x03);
- delay(10);
- SH=read_add(0x04);
- temp=SH;
- temp=temp<<8;
- temp=temp+SL;
- Night=temp;
- delay(10);
- SL=read_add(0x05);
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
|
-
-
c程序.zip
2020-3-12 17:36 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
61.56 KB, 下載次數(shù): 187, 下載積分: 黑幣 -5
-
-
pcb圖.zip
2020-3-12 17:36 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
529.58 KB, 下載次數(shù): 66, 下載積分: 黑幣 -5
只有jpg圖片
-
-
protus仿真.zip
2020-3-12 17:36 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
49.45 KB, 下載次數(shù): 201, 下載積分: 黑幣 -5
-
-
原理圖.zip
2020-3-12 17:36 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
145.99 KB, 下載次數(shù): 97, 下載積分: 黑幣 -5
|