第一篇:單片機控制的LCD 1602的電子廣告牌
單片機控制的LCD 1602的電子廣告牌
設計要求:
用單片機控制字符型LCD 1602顯示字符信息“Hello everyone!”和“Welcome to Harbin”。字符信息“Hello everyone!”、“Welcome to Harbin”分別從LCD 1602右側第一行、第一行滾動移入,然后再從左側滾動移出,循環顯示。
功能說明:由于液晶模塊用怎樣的命令控制顯示由模塊本身在制造時已經給出,實現相應的顯示功能參照說明即可,液晶模塊與單片機的連接不采用添加多個與非門的方式,而采用更直接、清晰的方式,使WR、RD直接與LCD的R/W、RS相連,使能端與P3^5相連,由軟件給出下降沿,電路圖如下:
詳細的功能說明:
1)給LCD寫命令、送數據等均需要進行選中寄存器、發送命令或數據代碼、使能端有效等過程,若逐一寫出會使程序混亂冗長,因此將寫命令、寫數據、初始化等分別封裝在子函數中,方便隨時調用。
2)為實現滾動顯示,使用命令打開整體顯示移動。
3)由于顯示字母只需將相應的ASCII代碼發送給LCM即可,因此將需要顯示的字符直接設為數組中的元素,顯示時逐一寫入液晶。4)若數組中只有相應的字符,顯示的末尾會出現預料之外的字符,因此加入足夠的空格避免這種現象發生。
5)為實現循環不斷顯示的功能,只需將函數整體放入while(1)中即可,但應注意下一次循環開始前將DDRAM的地址回復為第一行。C語言程序: #include
uchar code tab1[]=”Welcome to Harbin 出現不該出現的字符 sbit LCDE=P3^5;sbit LCDRW=P3^6;sbit LCDRS=P3^7;
void WriteCMD(uchar);
void init();
void WriteData(uchar);
void Delay();
void mydelay(int);
void main(){
uint i;
init();
while(1)
{
for(i=0;i<32;i++)
{
WriteData(tab[i]);的“忙”狀態
mydelay(50);
}
mydelay(50);
WriteCMD(0x01);
WriteCMD(0x80+0x40+15);行末尾,從此處開始進入字符
for(i=0;i<33;i++)
{
WriteData(tab1[i]);
mydelay(50);
}
mydelay(50);
“;
”;//字符后面加若干個空格,防止滾動顯示時
//定義寫命令函數
//定義初始化函數
//定義寫數據函數
//定義延遲函數
//定義無符號整形變量
//液晶模塊的初始化
//使之一直進行滾動顯示程序,不斷循環 //顯示第一行字符
//每顯示一個字符后停留一會,越過液晶
//清屏,準備進行下一行顯示
//改變DDRAM的地址,更改為第二 //開始輸入第二行字符
WriteCMD(0x01);
WriteCMD(0x80+15);
進入下一次循環,顯示重新開始
} }
void Delay(){
uint uiCount;
for(uiCount=0;uiCount<250;uiCount++);}
void WriteCMD(uchar Command)
寄存器 {
Delay();
LCDE=1;
LCDRS=0;
LCDRW=0;
LCDPORT=Command;
LCDE=0;
執行命令 }
void WriteData(uchar dat)
符 {
Delay();
LCDE=1;
LCDRS=1;
LCDRW=0;
LCDPORT=dat;
LCDE=0;
}
void init()
{
LCDRW=0;
LCDE=0;
WriteCMD(0x38);
WriteCMD(0x0c);
WriteCMD(0x07);
WriteCMD(0x01);
WriteCMD(0x80+15);
//DDRAM的地址改回第一行,準備 //寫命令函數,用于修改液晶的狀態
//先延時,越過液晶“忙”狀態
//使能端先置1 //設置RS為0,打開指令寄存器
//設置為寫寄存器狀態
//輸出命令
//使能端由1變0,出現下降沿有效,//寫數據函數,用于提供液晶的顯示的字
//把LCD改為寫入數據狀態
//再輸出數據
//使能端有效,顯示數據
//初始化程序,模塊化使程序更清晰
//設置雙行顯示、8位數據接口
//設置整體顯示開、光標關、字符不閃爍//設置為增量方式,整體顯示移動開 //清屏
//設置字符進入屏幕的初始位置
}
void mydelay(int x){
int i,j;
for(i=x;i>0;i--)
for(j=255;j>0;j--);}
第二篇:基于51單片機的電子廣告牌電路設計
基于51單片機的電子廣告牌電路設計
2011-10-15 14:08:20
來源:互聯網
關鍵字:51單片機 電子廣告牌
0 引 言
現在城市中用于裝點各種建筑物的絢麗色彩依舊是霓虹燈.但是霓虹燈具有發熱量大,亮度較小,色彩較暗,價格較貴且耗電量較大等缺點已經不作為現在裝飾的主要選擇對象。點陣屏具有價格便宜,可視度遠,亮度高,耗能較低,體積較小,且可以根據實際情況由幾塊小的點陣屏組合成較大面積的點陣塊等優點。在此主要介紹以AT89S51為控制芯片,用8×8的點陣屏4塊來級聯實現16×16的點陣屏,從而用于廣告牌顯示等。系統設計方案
鑒于所設計的點陣屏為16×16單色顯示,可以用8×8的點陣屏4塊來級聯實現,此時點陣屏的行列各為16管腳,需要擴展口,采用74LS164串行輸入并行輸出來實現。整個系統以AT89S51為控制芯片,P0/P2口為行控制,P3口為芯片74LS164的輸入,且2片74LS164級聯后為列控制,通過軟件程序調用不同的代碼來顯示字符或文字。元器件介紹
2.1 AT89S51單片機簡介
AT89S51擁有4 KB的可編程的閃存(FLASHProgrammahle AND Erasable Read Only Memory)。片上的閃存允許在系統內再編程,在系統開發時可以十分容易地進行程序修改,即使程序錯誤也不會成為廢品。由于在單片機集成電路上包括用8位CPU和閃存,AT89S51成為強大的控制器,它為很多嵌入式系統提供一種高效靈活的解決方案。基于以上理由,選擇了AT89S51。
2.2 74LS164芯片簡介
在單片機系統中,如果并行口的I/O資源不夠,而串行口又沒有其他的作用,那么可以用74LS164來擴展并行I/O口,節約單片機資源。74LS164是一個串行輸入/并行輸出的移位寄存器,并帶有清除端。硬件設計
圖1電路為1塊8×8點陣顯示電路連接圖。
(1)把“單片機系統”區域中的P1端口用8芯排芯連接到“點陣模塊”區域中的“DR1~DR8”端口上;
(2)把“單片機系統”區域中的P3端口用8芯排芯連接到“點陣模塊”區域中的“DC1~DC8”端口上;如果要顯示大的圖像可多個點陣拼在一起,將點陣的行和行相串聯,列和列相串聯,用741S164控制單個行即可。部分源代碼
部分源代碼如下:
SEND: MOV A,R1 ;送表首地址
ACALL TAB1 ;查列表
5結 語
在此研究了用AT89S51為控制芯片,用8×8的點陣屏來實現廣告字的滾動顯示,對環保、節能有重大意義。
(本文轉自電子工程世界:http://)
第三篇:單片機課程設計報告LCD顯示溫度
《單片機原理與應用》
課程設計報告
題 目:LCD數字式溫度濕度測量計 專 業:自動化 班 級:A1332 學 號:10 姓 名:曾志勇 指導老師:查兵
2016-06-08
目 錄
1.設計題目、要求及分工..................................1 1.1.設計要求.........................................1 1.2.分工.............................................1 2.系統設計方案論證與選擇................................1 3.系統硬件電路設計......................................1 3.1.單片機的選擇......................................1 3.2.溫度傳感器電路的設計..............................2 3.3.LCD1602顯示設計..................................3 4.系統軟件設計..........................................4 4.1.主程序...........................................4 4.2.讀出溫度子程序....................................6 5.系統仿真調試結果記錄及分析...........................11 6.總結.................................................13 參考文獻................................................14
設計題目、要求及分工
1.1.設計要求
(1)熟悉掌握單片機的中斷,定時器及各并行口的應用;(2)熟悉掌握單片機溫度濕度的測量方法;(3)利用溫度傳感器及單片機完成對溫度的檢測;(4)掌握將檢測的溫度信號轉換為數碼管顯示的數字信號;
(5)設計一個簡單數字溫度計,能夠測量通常環境下的溫度,能夠實現零下溫度的測量,能夠測量小數,精度為0.01度。
1.2.分工
經過我和隊友的商討,為了能最大發揮各自的長處。我主要負責程序的編寫與單片機的調試。他主要負責一些相關資料文獻的查找與課程設計報告。
1.系統設計方案論證與選擇
在日常生活和生產中,我們經常要測量環境的溫度濕度,傳統的測量方式采用水銀溫度計和干濕球濕度計查算法,存在著誤差大,操作使用不便等問題,采用工業級測量儀表價格昂貴。采用AT89C51和溫度傳感器等構成的LCD數字式溫度濕度測量計精度高且價格便宜。
由于本設計是測溫電路,可以使用一只溫度傳感器DS18B20,此傳感器,可以很容易直接讀取被測溫度值,進行A/D轉換,將數據傳入80C51單片機中,單片機處理后,通過LED顯示出當前實測溫度。
2.系統硬件電路設計
2.1.單片機的選擇
單片80C51具有低電壓供電和體積小等特點,四個端口只需要兩個口就能滿足電路系統的設計需要,很適合便攜手持式產品的設計使用系統。
本次設計需要注意的幾個端口: P0口(39—32):是一組8位漏極開路行雙向I/O口,也既地址/數據總線復用口。可作為輸出口使用時,每位可吸收電流的方式驅動8個TTL邏輯電路,對端口寫“1”可作為高阻抗輸入輸入端用。在訪問外部數據存儲器時,這組口線分時轉換地址(低8位)和數據總線復用,在訪問期間激活內部上拉電阻。在Flash編程時,PO口接收指令字節,而在程序校驗時,輸出指令字節,校驗時,要求接上拉電阻。P3口(10—17):是一組帶有內部上拉電阻的8位雙向I/O口,P1的輸入緩沖級可驅動(吸收或輸出電流)4個TTL邏輯門電路。對P3口寫入“1”時,它們被內部上拉電阻拉高并可作為輸出端口。作輸出端口時,被外部拉低的P3口將用上拉電阻輸出電流。
2.2.溫度傳感器電路的設計
DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現9~12位的數字值讀數方式。
64位ROM的結構開始8位是產品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面56位的CRC檢驗碼,這也是多個DS18B20可以采用一線進行通信的原因。溫度報警觸發器TH和TL,可通過軟件寫入戶報警上下限。DS18B20溫度傳感器的內部存儲器還包括一個高速暫存RAM和一個非易失性的可電擦除的EERAM。高速暫存RAM的結構為8字節的存儲器,結構如圖2.3所示。頭2個字節包含測得的溫度信息,第3和第4字節TH和TL的拷貝,是易失的,每次上電復位時被刷新。第5個字節,為配置寄存器,它的內容用于確定溫度值的數字轉換分辨率。DS18B20工作時寄存器中的分辨率轉換為相應精度的溫度數值。該字節各位的定義:低5位一直為1,TM是工作模式位,用于設置DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設置為0,用戶要去改動,R1和R0決定溫度轉換的精度位數,來設置分辨率S18B20溫度轉換的時間比較長,而且分辨率越高,所需要的溫度數據轉換時間越長。因此,在實際應用中要將分辨率和轉換時間權衡考慮。溫度傳感器18B20匯編程序,采用器件默認的12位轉化,最大轉化時間750微秒,可以將檢測到的溫度直接顯示到80C51的兩個數碼管上。
高速暫存RAM的第6、7、8字節保留未用,表現為全邏輯1。第9字節讀出前面所有8字節的CRC碼,可用來檢驗數據,從而保證通信數據的正確性。
當DS18B20接收到溫度轉換命令后,開始啟動轉換。轉換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第1、2字節。單 片機可以通過單線接口讀出該數據,讀數據時低位在先,高位在后,數據格式以0.0625℃/LSB式表示。
當符號位S=0時,表示測得的溫度值為正值,可以直接將二進制位轉換為十進制;當符號位S=1時,表示測得的溫度值為負值,要先將補碼變成原碼,再計算十進制數值。表2是一部分溫度值對應的二進制溫度數據。
DS18B20完成溫度轉換后,就把測得的溫度值與RAM中的TH、TL字節內容作比較。若T>TH或T<TL,則將該器件內的報警標志位置位,并對主機發出的報警搜索命令做出響應。因此,可用多只DS18B20同時測量溫度并進行報警搜索。
在64位ROM的最高有效字節中存儲有循環冗余檢驗碼(CRC)。主機ROM的前56位來計算CRC值,并和存入DS18B20的CRC值作比較,以判斷主機收到的ROM數據是否正確。
另外,由于DS18B20單線通信功能是分時完成的,它有嚴格的時隙概念,因此讀寫時序很重要。系統對DS18B20的各種操作按協議進行。操作協議為:初使化DS18B20(發復位脈沖)→發ROM功能命令→發存儲器操作命令→處理數據。
圖 2-1 溫度傳感器電路
2.3.LCD1602顯示設計
圖 2-2 LCD顯示電路圖
LCD1602顯示流程:
圖3-3 流程圖
3.系統軟件設計
3.1.主程序
主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量溫度值。溫度測量每1s進行一次。主程序流程圖如圖4.1所示:
#include
//初始化LCD1602
//寫地址 80表示初始地址 LcdWriteCom(0x88);LcdWriteData('C');while(1){ LcdDisplay(Ds18b20ReadTemp());Delay1ms(1000);//1s鐘刷一次 // } }
/* 函數名 : LcdDisplay()* 函數功能
: LCD顯示讀取到溫度/ void LcdDisplay(int temp)//lcd顯示
{ unsigned char datas[] = {0, 0, 0, 0, 0};//定義數組
float tp;if(temp< 0)
//當溫度值為負數
{
LcdWriteCom(0x80);
//寫地址 80表示初始地址 LcdWriteData('-');//顯示負
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;} else {
LcdWriteCom(0x80);
LcdWriteData('+');
tp=temp;
temp=tp*0.0625*100+0.5;
} datas[0] = temp / 10000;datas[1] = temp % 10000 / 1000;datas[2] = temp % 1000 / 100;datas[3] = temp % 100 / 10;datas[4] = temp % 10;LcdWriteCom(0x82);
//寫地址 80表示初始地址
LcdWriteData('0'+datas[0]);//百位 LcdWriteCom(0x83);
//寫地址 80表示初始地址
LcdWriteData('0'+datas[1]);//十位 LcdWriteCom(0x84);
//寫地址 80表示初始地址
LcdWriteData('0'+datas[2]);//個位 LcdWriteCom(0x85);
//寫地址 80表示初始地址 //顯示 ‘.’
//寫地址 80表示初始地址 LcdWriteData('.');LcdWriteCom(0x86);
LcdWriteData('0'+datas[3]);//顯示小數點 LcdWriteCom(0x87);
//寫地址 80表示初始地址
} LcdWriteData('0'+datas[4]);//顯示小數點
圖 3-1主程序流程圖
3.2.讀出溫度子程序
讀出溫度子程序的主要功能是讀出RAM中的9字節。在讀出時必須進行CRC 校驗,校驗有錯時不能進行溫度數據的改寫。讀出溫度子程序流程圖如下圖所示:
#include“temp.h” void Delay1ms(uint y){ uint x;
} uchar Ds18b20Init(){
uchar i;DSPORT = 0;i = 70;
//將總線拉低480us~960us for(;y>0;y--){ for(x=110;x>0;x--);} while(i--);//延時642us DSPORT = 1;
//然后拉高總線,如果DS18B20做出反應會將在15us~60us后總線拉低
} void Ds18b20WriteByte(uchar dat)i = 0;while(DSPORT)//等待DS18B20拉低總線 {
} return 1;//初始化成功 i++;if(i>5)//等待>5MS { } Delay1ms(1);return 0;//初始化失敗 { uint i, j;for(j=0;j<8;j++)
{
DSPORT = 0;i++;DSPORT = dat & 0x01;//然后寫入一個數據,從最低位開始 i=6;while(i--);//延時68us,持續時間最少60us DSPORT = 1;
//然后釋放總線,至少1us給總線恢復時間才能接 //每寫入一位數據之前先把總線拉低1us 著寫入第二個數值
} uchar Ds18b20ReadByte(){
uchar byte, bi;uint i, j;for(j=8;j>0;j--){
DSPORT = 0;//先將總線拉低1us i++;DSPORT = 1;//然后釋放總線 i++;i++;//延時6us等待數據穩定
bi = DSPORT;//讀取數據,從最低位開始讀取
/*將byte左移一位,然后與上右移7位后的bi,注意移動之后移掉 } dat >>= 1;那位補0。*/ byte =(byte >> 1)|(bi << 7);
} i = 4;//讀取完之后等待48us再接著讀取下一個數
while(i--);
}
return byte;void Ds18b20ChangTemp(){
Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);
//跳過ROM操作命令
Ds18b20WriteByte(0x44);//溫度轉換命令
//等待轉換成功,而如果你是一直刷著的話,就不// Delay1ms(100);用這個延時了 } void Ds18b20ReadTempCom(){ Ds18b20Init();
} int Ds18b20ReadTemp(){ int temp = 0;
命令
tml = Ds18b20ReadByte();tmh = Ds18b20ReadByte();temp = tmh;temp <<= 8;Delay1ms(1);Ds18b20WriteByte(0xcc);//跳過ROM操作命令 Ds18b20WriteByte(0xbe);//發送讀取溫度命令
uchar tmh, tml;Ds18b20ChangTemp();Ds18b20ReadTempCom();
//先寫入轉換命令
//然后等待轉換完后發送讀取溫度
//讀取溫度值共16位,先讀低字節 //再讀高字節
} temp |= tml;return temp;讀出溫度子程序 讀出溫度子程序的主要功能是讀出RAM中的9字節。在讀出時須進行CRC校驗,校驗有錯時不進行溫度數據的改寫。得出溫度子程序流程圖如下圖所示。
圖 3-2
溫度轉換命令子程序 溫度轉換命令子程序主要是發溫度轉換開始命令。當采用12位分辨率時,轉換時間約為750ms。在本程序設計中,采用1s顯示程序延時法等待轉換的完成。溫度轉換命令子程序流程圖如下圖所示。
圖 3-2
4.系統仿真調試結果記錄及分析
硬件調試比較簡單,首先檢查電感的焊接是否正確,然后可用萬用表測試或通電檢測。軟件調試可以先編寫顯示程序并進行硬件的正確性檢驗,然后分別進行主程序、讀出溫度子程序、溫度轉換命令子程序、計算溫度子程序和現實數據刷新子程序等的編程及調試 由于DS18B20與單片機采用串行數據傳送,因此,對DS18B20進行讀/寫編程時必須嚴格地保證讀/寫時序;否則將無法讀取測量結果。
電路Isis仿真測試
燒寫程序至單片機:
液晶顯示室溫為+28.06度 用手觸摸DS18B20,發現溫度上升為+32.75度,證明溫度傳感正常工作。
5.總結
這次課程設計,主要是以STC89C51單片機為核心的,對溫度的檢測與顯示進行了簡單的設計與闡述。因沒有濕度傳感器模塊,所以未進行濕度檢測。本次課程設計可以說是軟硬結合,又以硬件為主。當今科技發展迅速,單片機開發有著光明的前景。由于單片機經濟實用、開發簡便等特點依然在工業控制、家電等領域占據了廣泛的市場。所以我選擇這樣的設計課題,并且能通過此次設計來提高自己軟件編制和硬件電路設計的能力。在我完成這次課程設計的過程中,當看到自己將專業知識用于解決實際的問題時,那份成就感和喜悅感是難以形容的。在這次實際的編程以及調試程序過程中,我發現自己學很多課本以外的東西。光靠自己在書本上所學過的這點知識是遠遠不夠的,真正地認識到了工作就是學習的道理。尤其是對于編程來說,需要硬件的功底,也需要軟件的能力。當程序有一點點錯誤時,將使整個程序無效,需要自己靜下心來發現錯誤,改正錯誤,一次又一次得進行調試,鍛煉了沉著踏實的心態。
通過這次對數字溫度計的設計與制作,讓我們了解了設計電路的程序,也讓我們了解了關于數字溫度計的原理與設計理念,要設計一個電路總要先用仿真,仿真成功之后才實際接線的。
但是最后的成品卻不一定與仿真時完全一樣,因為,在實際接線中有著各種各樣的條件制約著。并且,在仿真中無法成功的電路接法,在實際中因為芯片本身的特性而能夠成功。所以,在設計時應考慮兩者的差異,從中找出最適合的設計方法。
通過這次學習,讓我們對各種電路都有了大概的了解,所以說,坐而言不如立而行,對于這些電路還是應該自己動手實際操作才會有深刻理解。從這次的課程設計中,我真正的意識到,在以后的學習中,要理論聯系實際,把我們所學的理論知識應用到實際當中,學習單機片機更是如此,程序只有在經常寫和讀的過程中才能提高,這就是我在這次課程設計中的最大收獲。這次課程設計對我來說是一次比較全面的、富有創造性和探索性的鍛煉,令我深有感觸,對于我今后的學習、工作和生活都將是受益非淺。
參考文獻
(1)江世明.單片機原理與應用.上海交通大學出版社.2013;(2)朱清慧.電子線路設計、制版與仿真.清華大學出版社.2011.6;
(3)黃同成.程序設計基礎與教程(C語言).湖南人民出版社.2011.12;
(4)王東峰等.單片機C語言應用100例[M].北京電子工業出版社,2009;
(5)陳海宴.51單片機原理及應用[M].北京航空航天大學出版社.2010;
(6)胡漢才.單片機原理及接口技術[M].北京清華大學出版社.1996;
(7)高稚允,高岳.光電檢測技術[M].北京國防工業出版社.1983;
第四篇:LCD電子鐘程序(廣工單片機課程設計)
#include
#define uchar unsigned char
#define uint unsigned int
#define KEY_IO P3
#define LCD_IO P0
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
sbit SPK = P1^2;
sbit LED = P2^4;
sbit KEY_0 = P3^7;
sbit KEY_1 = P3^6;
sbit KEY_2 = P3^5;
sbit KEY_3 = P3^4;
bit new_s, modify = 0;
char t0, sec = 0, min = 0, hour = 0;
char code LCD_line1[] = “I LOVE U”;
char code LCD_line2[] = “Timer: 00:00:00 ”;char Timer_buf[] = “00:00:00”;
char a,b,c,k = 0;
//--------------------void delay(uint z)
{
uintx, y;
for(x = z;x > 0;x--)
for(y = 100;y > 0;y--);
}//--------------------void W_LCD_Com(uchar com)//寫指令 {
LCD_RS = 0;
LCD_IO = com;// LCD_RS和R/W都為低電平時,寫入指令
LCD_EN = 1;delay(5);LCD_EN = 0;//用EN輸入一個高脈沖 }
//--------------------void W_LCD_Dat(uchar dat)//寫數據
{LCD_RS = 1;LCD_IO = dat;// LCD_RS為高、R/W為低時,寫入數據LCD_EN = 1;delay(5);LCD_EN = 0;//用EN輸入一個高脈沖 }
//--------------------void W_LCD_STR(uchar *s)//寫字符串 {while(*s)W_LCD_Dat(*s++);}
//--------------------
void W_BUFF(void)//填寫顯示緩沖區
{Timer_buf[7] = sec % 10 + 48;Timer_buf[6] = sec / 10 + 48;Timer_buf[4] = min % 10 + 48;Timer_buf[3] = min / 10 + 48;Timer_buf[1] = hour % 10 + 48;Timer_buf[0] = hour / 10 + 48;W_LCD_STR(Timer_buf);}
//--------------------
uchar read_key(void){ucharx1, x2;KEY_IO = 255;x1 = KEY_IO;if(x1!= 255){delay(100);x2 = KEY_IO;if(x1!= x2)return 255;while(x2!= 255)x2 = KEY_IO;if else if(x1 == 0xbf)return 1;else if(x1 == 0xdf)return 2;else if(x1 == 0xef)return 3;else if(x1 == 0xf7)return 4;}return 255;} //--------------------
void Init(){LCD_RW = 0;W_LCD_Com(0x38);delay(50);W_LCD_Com(0x0c);W_LCD_Com(0x06);W_LCD_Com(0x01);W_LCD_Com(0x80);W_LCD_STR(LCD_line1);W_LCD_STR(LCD_line2);
TMOD = 0x01;//T0定時方式1TH0 = 0x4c;TR0 = 1;//啟動T0
PT0 = 1;//高優先級, 以保證定時精度
ET0 = 1;EA = 1;}
//--------------------
void main(){uint i, j;uchar Key;Init();while(1){//
if(new_s){ //如果出現了新的一秒, 修改時間
new_s = 0;sec++;sec %= 60;if(!sec){min++;min %= 60;if(!min){ hour++;hour %= 24;}}W_BUFF();//寫顯示
W_LCD_Com(0xc0 + 7);(x1 == 0x7f)return 0;W_LCD_Com(0xC0);
//
if(!sec &&!min){ //整點報時
for(i = 0;i < 200;i++){SPK = 0;for(j = 0;j < 100;j++);SPK = 1;for(j = 0;j < 100;j++);} }} //Key = read_key();//讀出按鍵
switch(Key){//分別處理四個按鍵
case0: if(KEY_0){min++;min %= 60;W_BUFF();break;}case1: if(KEY_1){hour++;hour %= 24;W_BUFF();break;}case2: if(KEY_2){ a=sec;b=min;c=hour;sec = 0, min = 0, hour = 0;}case3: if(KEY_3){sec=a+sec;if(sec>60){sec=sec-60;min++;}min=b+min;if(min>60){min=min-60;hour++;}hour=c+hour;if(hour>24){hour=hour-24;} }} }} //--------------------
void timer0(void)interrupt 1//T0中斷函數, 50ms執行一次{TH0 = 0x4c;t0++;t0 %= 20;//20, 一秒鐘if(t0 == 0){new_s = 1;LED = ~LED;}if(modify)LED = 0;} K0分加一 K1時加一 K2秒表開始
K3秒表結束,恢復正常時間!
第五篇:電子,單片機畢業設計畢業論文
706.波形發生器、頻率計和數字電壓表設計 707.水位遙測自控系統 畢業論文
708.寬帶視頻放大電路的設計 畢業設計 709.簡易數字存儲示波器設計畢業論文 710.球賽計時計分器 畢業設計論文 711.IIR數字濾波器的設計畢業論文 712.PC機與單片機串行通信畢業論文 713.基于CPLD的低頻信號發生器設計畢業論 714.基于51單片機的多路溫度采集控制系統 715.倉庫溫濕度的監測系統 716.基于單片機的電子密碼鎖 717.單片機控制交通燈系統設計
718.智能搶答器設計
719.基于DSP的IIR數字低通濾波器的設計與實現 720.基于LabVIEW的PC機與單片機串口通信 721.DSP設計的IIR數字高通濾波器的設計 722.單片機數字鐘設計 723.數字自動打鈴系統
724.激光切割軌道系統的上位機設計 725.由AT89C51控制的太陽能熱水器 726.單片機歩進電機轉速控制器的設計 727.頻率特性測試儀的設計
728.用集成溫度傳感器組成測溫控制系統 729.微尺度觀測儀的物理原理及應用 730.低頻數字式相位差測量儀的設計 731.智能開關穩壓電源的設計
732.智能家居系統CAN總線通信模塊設計 733.智能家居系統GPRS通信模塊設計 734.智能家居GUI模塊設計
735.小型風光互補路燈控制器設計
736.基于MCS-51單片機的高精度數字測相裝置的設計 737.基于單片機的火災自動報警系統 738.數字顯示多路電壓設計 739.智能防盜報警系統設計 740.數字調頻立體收音機
741.基于單片機的水溫控制系統 742.電子廣告牌的設計
743.電力變壓器保護
744.變電站綜合自動化系統研究 745.智能象棋比賽定時器的設計 746.基于單片機的電動車蹺蹺板 747.藝術彩燈設計
748.基于單片機的密碼鎖設計 749.雙輸出可調穩壓電源的設計 750.用IC卡實現門禁管理系統
751.智能消毒柜控制系統 752.自動太陽光追蹤器
753.基于89C51的點陣屏顯示設計
754.利用AT89C5單片機實現節日彩燈控制 755.自動溫度控制系統 756.室內溫度控制報警器 757.8751H單片機控制步進電機 758.高精密多路計時器 759.小型觸摸式防盜報警器 760.頻率特性測試儀設計 761.出租車計價器
762.數控直流穩壓電源設計
763.數字電度表--具有遠程抄表功能
764.基于多單片機的數據測控硬件系統的設計
765.基于MATLAB的他勵直流電機虛擬教學實驗系統的設計與開發 766.基于87C196MC交流調速系統主電路硬件的設計與開發 767.基于80C196MC交流調速系統控制電路的硬件設計與開發 768.多環教學實驗系統模擬電子電路控制模板的設計與開發 769.雙閉環控制系統模擬控制模板設計
770.雙閉環V-M直流調速虛擬實驗系統的開發 771.雙閉環PWM直流調速虛擬實驗系統的開發 772.基于8098單片機實現的SPWM變頻調速系統 773.調幅收音機的原理與調試 774.電力線載波系統
775.基于單片機的溫室電爐的控制系統
776.基于MCS-51單片機的變色燈控制系統設計與實現 777.基于單片機的頻率計的設計 778.烤箱溫度控制系統 779.電容測量儀
780.基于AT89S51單片機的波形發生器設計 781.簡易低頻信號發生器
782.基于單片機的紅外遙控開關
783.發動機電噴內核模型的研究及實踐 784.基于AT89S52的函數信號發生器
785.智能住宅的功能設計與實現原理研究 786.基于PIC16F876A單片機的超聲波測距儀 787.基于單片機的呼叫系統的設計 788.電容測量電路的設計
789.電壓頻率變換器
790.基于單片機的IC卡門禁系統設計 791.壓阻式傳感器在壓力方面的技術應用 792.全集成電路高保真擴音機
793.單片機控制的三相全控橋觸發系統設計 794.IC卡智能燃氣表的研制
795.傳感器信號模擬電路設計研究
796.基于C8051F040單片機的智能電導率分析儀 797.基于MODBUS協議的遠程端口控制系統 798.兩路電力線加載信號檢測識別系統 799.單片機的語音存儲與重放的研究 800.基于單片機的電器遙控器的設計