1. 急用!!!!!!基於單片機控制的車速里程錶
圖2所示是一種汽車轉速里程錶的電路原理圖。這是一個典型的單片機最小應用系統。單片機AT89C2051以其低價、低功耗、可靠性高和易於編程等特點著稱,X25045則是MCS-51系列單片機電路的一個輔助晶元,主要擔當復位、電壓檢測、看門狗和EEPROM功能,該晶元的採用大大提高了系統的可靠性,減少了外圍晶元數,可實現里程累計的掉電存儲。LCM1010為十位八段式帶背光液晶顯示模塊,採用三線串列介面,它具有功耗低和編程方便的特點。該顯示共分兩行顯示,第一行6位顯示累計里程,第二行4位(1位小數)用於顯示小計里程。圖中K1為小計里程清零鍵,R4用於調節液晶顯示器的視角對比度。晶元X25045是Xicor公司推出的帶有可編程μP 監控器的CMOS串列EEPROM,帶有4096位,按512×8來組織。它具有4位元組頁寫方式和10萬次使用周期,數據可保存100年。為了保證累計里程單元的個位或小計單元的小數位可靠刷新,當這些單元接近極限使用周期時,可採取換頁的辦法來使這些數據移動到新單元以繼續計數。圖2 霍爾感測器發出的脈沖信號經過整形可分成兩路,一路送到單片機的INT1端用於累計里程計數,另一路送到LM1819驅動器的轉速信號輸入端(10腳),然後由驅動電路根據輸入信號的頻率在2腳和12腳輸出相應的正弦和餘弦驅動信號,十字線圈產生的磁場共同作用於磁鐵可使轉軸組件偏轉相應的角度。但調整時要注意,電容C3的大小會改變表針偏轉的平滑性,C3越大,平滑性越好,但同時時間遲滯也會加大,而C3過小會使表針抖動;C4可用於調整電路的線性和滯後誤差;R4的值可以改變表針的指示刻度點。5 結論 本設計以單片機AT89C2051來實現里程累計、小計、清零及存儲,並以LM1819集成電路驅動十字線圈表頭,從而實現了車速的指示。該設計方案成本低廉、指針穩定性好、響應速度快、抗震性強、可靠性和性價比都很高。經實際使用證明,該里程錶完全可以取代傳統的以軟軸驅動的車速里程錶。當然,這只是一種實現方案,也可以由單片機通過軟體來驅動十字線圈表頭,即由單片機分別控製表頭的正弦線圈和餘弦線圈而省去LM1819集成電路。對此,此處不再贅述。
2. 汽車里程錶感測器模擬器電路圖
汽車里程錶感測器模擬器電路圖如下參考:
3. 利用51單片機動態顯示0-60秒錶
#include<reg52.h>
unsigned int s;
unsigned char key;
sbit d1=P3^7;
void delay() //動態顯示延時
{
int k;
for(k=0;k<100;k++);
}
void delay1() //去抖動延時
{
unsigned char code table[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
P2=table[s%10]; P3=0xf8; delay(); P3=0xf0;
P2=table[s/10%10]; P3=0xf4; delay(); P3=0xf0;
P2=table[s/100%10]; P3=0xf2; delay(); P3=0xf0;
P2=table[s/1000]; P3=0xf1; delay(); P3=0xf0;
}
void main()
{
TMOD = 0x01;
TH0 = (65536 - 10000) / 256;//初值,每10ms中斷一次
TL0 = (65536 - 10000) % 256;
ET0=1;
EA=1;
while(1) {
delay1();
if(!d1) {
delay1();
if(!d1) { //去抖動
while(!d1) delay1();//等待釋放
key++;
if(key == 4) key = 1;
}
}
if(key == 1) TR0 = 1;//開始計時
else if(key == 2) TR0 = 0;//停止
else s = 0;
}
}
void time0() interrupt 1 //內部中斷
{
TH0 = (65536 - 10000) / 256;
TL0 = (65536 - 10000) % 256;
s++;
if(s == 10000) s = 0;
}
4. 51單片機自行車測速里程錶上加一個燃燒卡路里功能可以實現嗎用LCD1602液晶顯示器,能把時間速度都顯示
普通測速表,起測60碼,規定距離為1公里。經過第一個參照物按下計時按鈕,經過第二個參照物的時候按下暫停按鈕,指針指到外圈的讀數即為速度。
詳細註解:
手錶測速是手錶外圈刻有500/400/350等依次減小的數字的計時表,這些代表的物理量為速度,單位為公里/小時;這個表圈稱為TACHYMETER(測速計)。
手錶測速的使用方法:
使用方法以在高速公路上行駛的車輛為例,因為高速公路上一般豎有距離指示標桿;當經過起始點時啟動秒錶,秒錶針從12點開始計時,當移動1公里時候,停止計時,此刻針所指的數字就是前一公里的平均速度。
譬如在12點位置有60,因為一分鍾走了1公里,那麼速度就是60公里/小時。
表圈上數字對應的位置是怎麼推算出來的呢?其實很簡單。要知道500這個數字應該刻在那個位置?那麼需要做個簡單的除法;即演算在500公里/小時的速度下行駛1公里需要多少時間,單位為秒。
1小時=3600秒 ,那麼500公里需要3600秒完成,根據等比原則,1公里需要的時間就是3600/500=7.2秒,所以500一定是刻在表盤的7.2秒處。同理,400應該刻在3600/400=9秒的地方,而100則刻在36秒的地方。
當時速低於60公里/小時的時候,測速計就不能直接使用了,除非增加低速度的刻度值
5. 基於單片機的速度里程錶設計的速度里程數據處理編程,急急急
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LCM_Data P0
#define Busy 0x80 //用於檢測LCM狀態字中的Busy標識
sbit LCM_RS = P1^0;
sbit LCM_RW = P1^1;//定義引腳
sbit LCM_E = P1^2;
uchar aa; /* 電機當前速度值 */
uint count,speed,distance;
void Disp_line1(void); //顯示屏幕第一行
void Disp_line2(void); //顯示屏幕第二行
void WriteDataLCM(uchar WDLCM);
void WriteCommandLCM(uchar WCLCM,BuysC);
uchar ReadStatusLCM(void);
void LCMInit(void);
void DisplayOneChar(uchar X, uchar Y, uchar DData);
void DisplayListChar(uchar X, uchar Y, uchar code *DData);
void Delay5Ms(void);
void Delay400Ms(void);
void runtime();
void ScanKey();
void LedDisplay();
void main(void)
{
Delay400Ms(); //啟動等待,等LCM講入工作狀態
LCMInit(); //LCM初始化
Delay5Ms(); //延時片刻(可不要)
EA=1; /* 開中斷 */
ET1=1;
TR1=1;
EX0=1;//開外部中斷0
IT0=1;//下降沿觸發方式
while(1)
{
DisplayListChar(0,0,"DISTANCE:");
DisplayOneChar(9,0,distance/10000+0x30);
DisplayOneChar(10,0,distance/1000%10+0x30);
DisplayOneChar(11,0,distance/100%10+0x30);
DisplayOneChar(12,0,distance/10%10+0x30);
DisplayOneChar(13,0,distance%10+0x30);
DisplayOneChar(15,0,'M');
DisplayListChar(0,1,"SPEED:");
DisplayOneChar(6,1,speed/1000+0x30);
DisplayOneChar(7,1,speed/100%10+0x30);
DisplayOneChar(8,1,speed/10%10+0x30);
DisplayOneChar(9,1,speed%10+0x30);
DisplayListChar(11,1,"M/S");
}
}
6. 急!基於單片機的車速檢測程序
電子車速里程錶的單片機實現方案
本設計以單片機AT89C2051來實現里程累計、小計、清零及存儲,並以LM1819集成電路驅動十字線圈表頭,從而實現了車速的指示.該設計方案成本低廉、指針穩定性好、響應速度快、抗震性強、可靠性和性價比都很高.經實際使用證明,該里程錶完全可以取代傳統的以軟軸驅動的車速里程錶.當然,這只是一種實現方案,也可以由單片機通過軟體來驅動十字線圈表頭,即由單片機分別控製表頭的正弦線圈和餘弦線圈而省去LM1819集成電路.對此,此處不再贅述.
http://tech.ddvip.com/2008/07/121637529047261_2.html
7. 智能速度里程錶的程序怎麼寫
摘要:給出了以AT89C2051為核心,利用單片機的運算和控制功能,並採用串口液晶顯示模塊實時顯示所測速度和里程的速度里程錶設計方案。該方案由於使用了串口液晶顯示模塊和E2PROM,以及高效快速演算法,因而可在節約系統資源和簡化程序設計的基礎上保證測量精度和系統實時性。
1 系統概述
1.1 系統組成
本速度里程錶由信號預處理電路、AT89C2051單片機、串口液晶顯示電路、串口數據存儲電路和系統軟體組成。其中信號預處理電路包含信號放大、波形變換和波形整形。系統硬體框圖如圖1所示。信號預處理電路中的放大器用於對待測信號進行放大,以降低對待測信號的幅度要求;波形變換和波形整形電路則用來將放大的信號轉換成可與單片機介面的TTL信號;通過單片機的設置可使INT0引腳能夠對內部定時器T0的工作進行控制,這樣能精確地測出加到INT0引腳的正脈沖寬度(即測出脈沖信號的周期);速度顯示部分採用串口液晶顯示模塊,所得的數據採用I2C匯流排�並通過E2PROM來存儲,因而節省了所需單片機的口線
和外圍器件,同時也簡化了顯示部分的軟體編程系統軟體包括單片機和液晶模塊的初始化模塊、液晶模塊的寫數據/命令子模塊、周期測量模塊、速度里程計算模塊、數據存儲模塊、速度和里程顯示數據轉BCD碼模塊、顯示數據消多餘零模塊、數據顯示模塊以及實時中斷服務模塊等。
1.2 系統工作原理
該設計能實時地將所測的速度顯示出來,同時也能夠累計顯示總里程數。該速度里程錶能將感測器輸入到單片機的脈沖信號的寬度(感測器將車速轉變成相應寬度的脈沖信號)實時地測量出來,然後通過單片機計算出速度和里程,再將所得的數據存儲到串口數據存儲器,並由串口液晶顯示模塊實時顯示出所測速度。本設計用兩個按鍵來控制顯示速度或里程。考慮到信號的衰減、干擾等影響,在信號送入單片機前應對其進行放大整形,然後再輸入到單片機進行測速。單片機利用定時器T0的控制功能測出輸入信號的周期後,再利用單片機的算術運算功能將周期轉換成速度,同時每秒鍾進行一次里程累計,從而計算出總里程。最後將得出的速度、里程值存儲在E2PROM中,並根據兩個按鍵的選擇情況來顯示速度或里程。為了方便計算要顯示數據值的段碼,可再將其轉換成壓縮的BCD碼,然後通過查表將要顯示的數據值中每一位的壓縮BCD碼轉換成8段碼送到顯示緩沖區,最後經串口送至液晶顯示模塊以顯示所測的速度或里程。
設計時,應綜合考慮測速精度和系統反應時間。本設計用測量脈沖頻率來計算速度,因而具有較高的測速精度。為了保證系統的實時性,系統的速度轉換模塊和顯示數據轉BCD碼模塊都採用快速演算法。另外,還應盡量保證其它子模塊在編程時的通用性和高效性。本設計的速度和里程值採用8位顯示,並包含兩個小數位。
2 系統硬體設計
2.1 信號預處理電路
它由二級電路構成,第一級是由開關三極體組成的零偏置放大器,採用開關三極體可以保證放大器具有良好的高頻響應。當輸入信號為零或負電壓時,三極體截止,電路輸出高電平;而當輸入信號為正電壓時,三極體導通,此時輸出電壓隨著輸入電壓的上升而下降,這使得速度里程錶既可以測量任意方波信號的頻率,也可以測量正弦波信號的頻率。由於放大器的放大功能降低了對待測信號的幅度要求,因此,系統能對任意大於0.5V的正弦波和脈沖信號進行測量。預處理電路的第二級採用帶施密特觸發器的反相器CT74LS14來把放大器生成的單相脈沖轉換成與COMS電平相兼容的方波信號�同時將輸出信號加到單片機的P3.2口上。
2.2 單片機的選擇
速度里程測量電路選用AT89C2051作為頻率計的信號處理核心。AT89C2051包含2kB快閃記憶體、128B的RAM、15根I/O口線、2個16位定時計數器、5個向量二級中斷結構和1個全雙工的串列口,同時還具有加密陣列的二級程序存儲器加鎖功能。設計中用到了AT89C2051的T0、T1 定時器和INT0引腳,以及P1埠的6個口線。由於該單片機與89C51相兼容,因此在硬體電路設計和軟體編程方面更加方便。考慮到AT89C2051本身固有的特點,設計時需注意以下幾點:首先,它的程序存儲器空間為2kB,因此所有的跳轉和分支轉移指令都要限制在這個范圍內。其次,它沒有MOVX指令,也就是說,它不支持外部存儲器操作,這一點設計時一定要考慮到。此外,AT89C2051自身還有一些其它特點,譬如可以使用命令使其工作在低功耗模式等。單片機利用T0定時器和INT0引腳來測量輸入方波信號的周期,而使用外部中斷0來控制定時器T0是否開始定時。當定時器T0的運行控制位復位時,不管P3.2引腳是何值,定時器都不工作。只有當定時器T0的運行控制位置位後,才能根據P3.2引腳狀態來決定定時器是否工作。當P3.2引腳出現高電平時,定時器T0開始定時;而在其出現低電平時,定時器T0停止工作,並將測量信號的周期保存在定時器的16位寄存器中。系統初始化時,可通過設置使T0 和T1定時器工作在模式1方式。T1定時器主要用於形成1秒鍾定時信號,用以為測量里程提供時間條件。
2.3 液晶顯示電路和數據存儲電路
本設計的顯示部分採用液晶顯示模塊LCM0825�該模塊與單片機的介面電路如圖3所示。LCM0825是8位段碼式液晶顯示模塊,它內部集成有LCD控制器、LCD驅動器和RAM,因而可方便顯示數據的編程。液晶顯示模塊採用3~4線串列數據輸入,可直接與單片機介面。由於串列介面方式節省了所需的口線和系統資源,因而使系統具有較高的資源利用率。該模塊可在2.7V~5.2V電壓下工作,其低功耗及背光可調特性使得設計更具有經濟性和通用性。LCM0825能夠顯示8位數據,每一個數據均以8段碼的形式放在其內部顯示RAM區,並用模塊內RAM的兩個存儲地址來放置一個數據的8段碼。8位數據共佔用內部16個地址。每一個數據位的8段碼存放形式及高低地址存放段碼的順序都和表1所列的第8位數據的8段碼存放格式一樣,只是段碼的存放地址不同。所以,編程時一定要考慮數據的存放地址和形式。在使用該液晶顯示模塊時,VCC與VLCD之間可用一個50kΩ的電位器來調整背光。3 系統軟體設計
3.1 數據處理過程
待測信號經預處理電路後加至單片機的P3.2(INT0)引腳可為單片機測量信號周期提供有效的輸入信號。單片機通過檢測P3.2引腳電平來決定是否啟動測量周期程序。當該引腳為高電平時�系統處於等待狀態,要一直到該引腳出現低電平時才開始測周期。測量時�首先將零賦給THO、TL0兩個寄存器,以將定時器T0的運行控制位TR0置位,同時也將ET0置位以允許定時器T0中斷。然後再判斷P3.2引腳是否還為低電平,如為低電平則等待,直到出現高電平再開始判斷P3.2引腳是否為低電平,當其不是低電平時再等待。一旦出現低電平,則立即復位TR0以終止定時器,以結束測周期程序。測周期過程中可能會發生定時器T0的中斷,每發生一次中斷則將R0寄存器加一,因此R0實際上是周期值的高位元組。測出的周期值存儲在R0、TH0、TL0三個寄存器中,然後將其轉換成速度。速度是用車輪的周長除以脈沖周期得到的。由於所測周期的單位是μs,因此在相除轉換時應將被除數擴大106倍,以保證得出正確的速度。每秒進行一次里程數累加時,可用當前的速度值加上一秒前的里程數得出當前的總里程數,得出的速度和總里程值放到E2PROM中。通過k1、k2鍵可顯示速度或里程值,k1鍵為速度鍵,k2鍵為里程鍵,兩個鍵可以隨時設置。要顯示的速度或里程放到R1、R2、R3三個寄存器後即可調用轉換BCD代碼模塊,以將數據值轉換成壓縮的BCD代碼並顯示處理。考慮到對響應時間的要求,BCD代碼模塊採用快速演算法。數據轉變成相應的壓縮BCD代碼後,可調用顯示消多餘零和顯示數據存儲模塊,並將要顯示的數據值通過查表轉換成相應數據的8段碼放到顯示緩沖區以備顯示。當然,編程時要把十進制數據的相應8段碼放在表格中,這樣才能進行查表以得到相應數值的段碼。此過程的另一個重要目的是消除最高有效位前面的多餘零,以使多餘零的段碼處於不顯示狀態,從而保證數據以正常的格式顯示出來。最後,將顯示緩沖區的8位8段碼經串口送至液晶顯示模塊進行顯示。
本系統軟體採用模塊化設計方法。整個系統由初始化模塊、周期測量模塊、速度轉換模塊、里程計算和存儲模塊、數據轉BCD碼模塊、顯示數據處理模塊、數據顯示模塊、定時器中斷服務模塊以及其它功能模塊組成,圖4給出了其軟體框圖。上電後,首先進入系統初始化模塊,此後系統軟體將開始運行,以實時地將所測數值顯示在液晶模塊上。
3.3 液晶顯示模塊的初始化
LCM0825是串列8位8段液晶顯示模塊。使用時,要在上電後對該模塊進行初始化。在初始化之前,應延時200ms以上再送命令。它的初始化工作過程如下:首先定義液晶模塊(當其命令代碼為:00101001),其次定義振盪器方式(當其命令代碼為00011000時,將模塊定義為內部RC振盪方式,命令代碼為00010100時,定義為外部晶體振盪方式)。然後分別用命令代碼00000001和00000011開振盪器和開顯示器。以上命令送入後,便可以在需要顯示數據時將相應的段碼直接送入模塊內部的顯示RAM中。在送顯示數據的段碼數據時,要考慮到顯示RAM 的高和低地址所對應的數據段碼的存放形式。其第8位數據的段碼與LCM0825內部的RAM地址的對應關系見表1。以後隨地址的增加依次存放第7位至第1位數據段碼。為了正確地顯示數據,應使要顯示的8位字元在顯示屏幕中為左起第一位,右止第8位。
圖5
另外,寫命令和寫數據程序應分別編寫,因為它們的命令格式及時序不同,見圖5。
由時序圖可見,編寫傳輸子程序時,所傳數據的高位先移入模塊,否則模塊不能正常工作或顯示。同樣,為了能正確讀/寫命令或數據,必須在時序中加入相應的延時;此外,為保證系統的低功耗,每次讀/寫命令或數據之後,都應將CS、RD、WR、DATA 置高電平。
4 結束語
本文介紹了一種基於單片機AT89C2051的速度里程錶的設計方法。由於該方案中使用了串口段碼液晶顯示模塊E2PROM儲存器,因而節省了硬體資源,提高了系統性價比。同時,也有益於在此電路基礎上利用單片機的資源擴展其它功能。