❶ 51單片機 c語言編程
P1^1在編譯預處理的頭文件里都給定的,同為初學者。
❷ 51單片機按鍵計數器C語言編程
#include<reg51.h>
#defineucharunsignedchar;
uchardistab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0到f
ucharnumber,dat,dis[4];
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
number%=3;
switch(number)
P1=0x20<<number;
P0=distab[dis[number]];
}
voidint0isr()interrupt0
{
dat++;
dat%=1000;
dis[0]=dat%10;
dis[1]=dat%100/10;
dis[2]=dat/100;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR1=1;
ET1=1;
EX0=1;
IT0=1;
EA=1;
while(1);
}
❸ 請教高手有關51單片機 C語言編程
僅此一句與埠無關的,它只是宏定義了一個變數chargecurrent並且確定它的值為0xec,貌似在下面的程序里要用它和P1.4口的采樣值進行比對,進而做出判斷和控制。
❹ 學習51單片機怎樣才能熟練掌握使用編程
自學MCS-51單片機心得體會
無論是作為一名業余的電子愛好者還是一名電子行業的相關從業人員,掌握單片機技術無疑可以使您如虎添翼,為您的電子小製作或者開發設計電子產品時打開方便的大門! 而且現在學習單片機技術的熱潮正在不斷升溫,時下多家電子類的報刊雜志如:《電子製作》《無線電》《電子報》《電子世界》都開設了詳細的單片機學習專欄,對於想學習單片機的朋友來說幫助很大,可以說現在的單片機學習環境是最好的,經過一段時間的努力,採用單片機來開發設計電子產品已經不再是專業電子工程師的「專利」!作為一個普通的電子愛好者完全可以通過一番努力後熟練掌握!國外的電子愛好者採用單片機來設計小製作非常普及,一些智能機器人、智能自動裝置內部都離不開單片機的身影~~~
現今單片機學習環境真的是太好了,有網路,有書籍,有報刊雜志,還有視頻教程,元件的采購方面也非常充足,相關的器材又多有便宜,相比而言,本人當初的學習條件就只可以「寒磣」二字來形容了:
站長的單片機技術是通過看書、動手自學學會的。 又因為站長的專業不是電子專業,所以單片機對於我來說是完全陌生的——最初我對單片機的概念都不清楚,還弄了一年多時間的單板機(i8085)——直到後來在圖書城「蹲點」(當時上網還是件奢侈的事情,何況我也沒電腦),才總算明白什麼是單片機。 當時(7年前,我還上高中的時候),可以供選擇的單片機種類並不如現今這么多,因此通常說起單片機就是特指MCS-51,因此我也就學了它。不過,正是因為用它的人多,所以能夠獲得的資料也多,元件也比較好購,因此我的自學之路才得以順利走下去。 當時那個窮啊,不敢買新零件,只能在廢舊家電上拆,參數不匹配也將就著用,而且還多虧了商鋪老闆看我可憐而以6折的價給了我一片i8051和一片2864,要知道當時這兩個東東加起來有七十多塊啊,夠我三個月的零花錢了(都高中了,三個月才這么點零花錢!)。 元件基本上差不多了,沒有電腦寫程序怎麼辦呢,好在我買的那本書上提供了指令的機器碼,所以我就先用筆在紙上把匯編源程序寫出來,然後根據書上的指令表把源程序手工翻譯成機器碼,就是10001111這樣的代碼,寫在源程序旁邊。這就是我的「編輯環境」和「編譯器」! 程序也有了,可是怎樣把它弄到存儲器里去呢,買編程器是不現實的,一來沒有電腦,二來,當時一隻編程器上千元的價格也只能讓我嘖嘖搖頭。
那怎麼辦呢……想來想去,找來找去,最後我利用以前做小實驗的那幾塊麵包板,拼在一塊合適大小的木板上,然後把存儲器按照要求插好,用插線連好電源和地,用電阻做出高低電平,然後通上電,再根據地址和數據的狀態,用鑷子把那些連線一根一根插到高或低電平,核對之後再把WR引線接一下地,這樣就可以寫入一個位元組,寫下面的位元組的時候就重復以上這些步驟就行了。若是程序要改動一點,那個工作量就「非常龐大」了。
這就是我的「編程器」! 我寫的第一個MCS-51單片機程序——點亮一隻LED,以及後來的流水燈程序等,就是在這樣的條件下來完成的。 現在,一個最廉價的模擬器也才人民幣幾十元,一塊功能多些的單片機實驗板也才上百元,簡直就是學習者的天堂了。 網路也給愛好者提供了很多很好的資料,例如平凡的單片機網站。平凡的單片機網站上有非常詳細的51單片機基礎知識教程,寫得非常生動朴實,對初學者來說幫助極大,其它還有不少網站也提供這些內容,還有專供愛好者討論交流的論壇。 學習單片機技術有一定的難度,不花費一番努力是很難學會的,但是只要不斷努力就一定能成功,學習單片機永遠記住一句話:實踐是檢驗真理的唯一方法。多動手做,哪怕是從點亮一隻指示燈開始,也要動手去做,否則就會永遠停留在書本上。 從51系列開始學單片機是個不錯的選擇:
1.書多、資料多
2.掌握51技術的人多,碰到問題能請教的老師也就多了
3.51系列的實驗晶元AT89C51價格低廉而且很容易買到,AT89C51晶元而且可以反復擦寫1000次以上,對於初學者來說真是太合適了,就算以後考慮工業運用,也可以先學透51後再學其他類型的單片機,畢竟技術是相通的。
4.相關的器材很廉價,具有絕大多數功能的下載型模擬器才幾十元,最簡單的專用編程器也才幾十元,如果有能力自己做編程器就更便宜。 學習單片機的第一步是看書,單片機是一個知識密集的東東,不看書是絕對不行的,北航出版社(北京航空航天大學出版社)出版了大量單片機方面的好書,可以直接登錄他們的網站進行郵購。本人認為第一本書應該是8051單片機的基礎原理書。我看的第一本書是咬牙買的兵器工業出版社的《8051/8098單片機原理幾介面設計》,這本書不是別人向我推薦的,也不是教材,但它比較系統地介紹了51晶元的基礎知識,我正是通過這本書入門的,可以很系統地了解51單片機。對比我後來買的其它51方面的書籍,我還是推薦這本。雖然這些書籍一開始不一定能懂,不過確實很有用,很有嚼頭,可以先大致看一遍,不消化的可以以後在試驗實踐中反復研究。 學習單片機的第二步是購買工具,單片機晶元必須藉助編程器才能寫入程序,本人用的編程器是一種性能較好的TOP2003通用編程器,通用編程器的特點是專為開發單片機和燒寫各類存儲器而設計的通用機型,它的編程可靠性高,支持的器件品種很多,不過這些商品化的設備價格偏高,不太適合初學者,或者說有一定程度上的浪費。 本人向初學者推薦一類廉價的編程器,注意,我說的是「一類」,而不是一種特定型號的。
這種編程器一般具有以下特點:
1.沒有外殼,而是以裸露的線路板直接銷售
2.通常支持常用的單片機和一些其它的晶元,例如存儲器等
3.通常不是USB介面,一般採用串列或並行介面連接電腦
4.價格一般在一兩百元左右
本站暫時不打算做這樣的編程器,但若朋友們有需要,本人也可以考慮做一些提供給大家。
不過從長遠的方面考慮,購置一台通用編程器還是有必要的,需要了解的朋友可以搜索一下「單片機編程器」。 學習單片機的第三步是反復編程實踐,一個好的實驗平台非常重要,實驗平台的類型有許多,那些專業的產品動輒幾千元,不是普通愛好者能承受的,也完全沒有必要使用那樣的產品。象編程器一樣,有廉價實驗板作為替代,有的產品比那些專業器材更好,例如本站推出的MCS-51 Study Board V3.0和V5.0板,就是非常貼近實際使用的設計,如果給它們配上適當的軟體,是完全可以直接作為工業控制板而安裝在機械設備中使用的。 模擬器對單片機初學者來說既是那麼耳熟,同時又有些陌生,這主要是因為市場上傳統的模擬器價格都在千元以上,對經濟不是非常寬裕的人來說是不小的開支。同時模擬器是用來提高調試程序效率的,也不是非需不可的,所以站長在自學單片機的時候沒有用過模擬器,碰到程序出錯的時候,只好苦思冥想,或者在程序中插入一些驅動埠的指令,然後再接上一些發光二極體做簡單指示,一般調試一個程序,反復燒寫幾十次晶元是很經常的。 具備了必要的工具以後就可以開始學習單片機了,對單片機進行編程可以採用匯編語言或者C語言,匯編語言的特點是代碼緊湊,對初學者的電腦水平要求低、上手快,但是程序編寫工作量大,站長網站的程序範例就是採用匯編語言編寫的,這里說的C語言是專用於51單片機的C語言,它的特點是編寫效率高,但是對使用者的電腦水平要求高,最好是已經會C語言了,站長網站上也有單片機C語言教程,是磁動力工作室網站明浩站長編寫的,站長不會C語言,所以是從匯編語言開始學編程的。我認為初學單片機的人最好懂一些匯編語言,匯編語言可以直接控制單片機的資源,比如具體的單片機引腳、內存地址,掌握這些也是很有必要的,學會匯編語言可以打下比較好的基礎,很多參考書也是這么說的,如果你是專業單片機開發人員,那麼C語言效率高,更適合你。 自學匯編語言,首先要學會看懂別人的匯編語言程序,可以將匯編語言的指令翻譯成自己容易理解的功能描述性文字,詳細注釋在程序後面,這樣便於自己以後引用或者別人容易看懂。站長看到別人寫的一些匯編程序的注釋都非常少,這非常不利於初學者學習和互相交流,所以只要是站長寫的程序都做了非常詳細的注釋。 學習匯編語言可以參考相關的書,匯編語言有100多條指令,但是常用的指令也就二三十條,可以先記住常用的匯編指令,如果一時記不住可以列印在紙上慢慢熟悉,然後對別人的匯編程序再加以試驗驗證,最後還可以在自己理解的基礎上對匯編程序的相關參數修改再反復試驗。 最後告訴朋友們一個秘密:學習單片機沒有捷徑!
❺ 51單片機最簡單的C語言編程求教
你把裡面的數字轉換成二進制,比如table[0]=0x3f=00111111b;
由於你這個是共陰極數碼管,高電平有效,所以寫一的地方對應的LED都點亮 至於那七根數碼管以及一個小數點和二進制位數對應關系你可以上網上查一下,簡單的說小數點也就是DP是最高位,其他的那七根數碼管從最上面那個開始順時針一共是六根從bit(0)到bit(5),最後橫著那根是bit(6)。希望能幫到你。至於你說的TEMP對應P2口,得有硬體圖才可以知道有什麼作用。
❻ c語言編程c51單片機
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
main(){
uint xdata *xp;//定義指向片外RAM的指針
uint data *p;//定義指向片內RAM的指針
uchar i;//定義循環變數
xp=0x100;//指向片外RAM的100H單元
p=0x30;//指向片內RAM的30H單元
for(i=0;i<10;i++){//循環10次
*p=*xp;//將片外RAM單元中的內容傳送給片內RAM單元
xp++;//指向下一個片外RAM單元地址
p++;//指向下一個片內RAM單元地址
}
}
❼ 自學51單片機C語言編程入了點門,下面不知怎麼再深入了!
找點實際的課題來做,學單片機要多實踐才好,等做了幾個實際的東西後應該就會對單片機的編程和外圍電路比較熟悉了。之後再嘗試去學習幾款其他的單片機,也可以嘗試學習ARM嵌入式哦。總之,就是多實踐,找個單片機課題,自己試著設計電路,編寫代碼,調試代碼和電路,提高是很快的。
❽ 單片機c語言編程100個實例
51單片機C語言編程實例 基礎知識:51單片機編程基礎 單片機的外部結構: 1. DIP40雙列直插; 2. P0,P1,P2,P3四個8位準雙向I/O引腳;(作為I/O輸入時,要先輸出高電平) 3. 電源VCC(PIN40)和地線GND(PIN20); 4. 高電平復位RESET(PIN9);(10uF電容接VCC與RESET,即可實現上電復位) 5. 內置振盪電路,外部只要接晶體至X1(PIN18)和X0(PIN19);(頻率為主頻的12倍) 6. 程序配置EA(PIN31)接高電平VCC;(運行單片機內部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 單片機內部I/O部件:(所為學習單片機,實際上就是編程式控制制以下I/O部件,完成指定任務) 1. 四個8位通用I/O埠,對應引腳P0、P1、P2和P3; 2. 兩個16位定時計數器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一個串列通信介面;(SCON,SBUF) 4. 一個中斷控制器;(IE,IP) 針對AT89C52單片機,頭文件AT89x52.h給出了SFR特殊功能寄存器所有埠的定義。 C語言編程基礎: 1. 十六進製表示位元組0x5a:二進制為01011010B;0x6E為01101110。 2. 如果將一個16位二進數賦給一個8位的位元組變數,則自動截斷為低8位,而丟掉高8位。 3. ++var表示對變數var先增一;var—表示對變數後減一。 4. x |= 0x0f;表示為 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示給變數TMOD的低四位賦值0x5,而不改變TMOD的高四位。 6. While( 1 ); 表示無限執行該語句,即死循環。語句後的分號表示空循環體,也就是{;} 在某引腳輸出高電平的編程方法:(比如P1.3(PIN4)引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P1.3 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P1_3 = 1; //給P1_3賦值1,引腳P1.3就能輸出高電平VCC 5. While( 1 ); //死循環,相當 LOOP: goto LOOP; 6. } 注意:P0的每個引腳要輸出高電平時,必須外接上拉電阻(如4K7)至VCC電源。 在某引腳輸出低電平的編程方法:(比如P2.7引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2.7 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P2_7 = 0; //給P2_7賦值0,引腳P2.7就能輸出低電平GND 5. While( 1 ); //死循環,相當 LOOP: goto LOOP; 6. } 在某引腳輸出方波編程方法:(比如P3.1引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P3.1 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 5. { 6. P3_1 = 1; //給P3_1賦值1,引腳P3.1就能輸出高電平VCC 7. P3_1 = 0; //給P3_1賦值0,引腳P3.1就能輸出低電平GND 8. } //由於一直為真,所以不斷輸出高、低、高、低……,從而形成方波 9. } 將某引腳的輸入電平取反後,從另一個引腳輸出:( 比如 P0.4 = NOT( P1.1) ) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P0.4和P1.1 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P1_1 = 1; //初始化。P1.1作為輸入,必須輸出高電平 5. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 6. { 7. if( P1_1 == 1 ) //讀取P1.1,就是認為P1.1為輸入,如果P1.1輸入高電平VCC 8. { P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND 2 51單片機C語言編程實例 9. else //否則P1.1輸入為低電平GND 10. //{ P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND 11. { P0_4 = 1; } //給P0_4賦值1,引腳P0.4就能輸出高電平VCC 12. } //由於一直為真,所以不斷根據P1.1的輸入情況,改變P0.4的輸出電平 13. } 將某埠8個引腳輸入電平,低四位取反後,從另一個埠8個引腳輸出:( 比如 P2 = NOT( P3 ) ) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2和P3 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P3 = 0xff; //初始化。P3作為輸入,必須輸出高電平,同時給P3口的8個引腳輸出高電平 5. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 6. { //取反的方法是異或1,而不取反的方法則是異或0 7. P2 = P3^0x0f //讀取P3,就是認為P3為輸入,低四位異或者1,即取反,然後輸出 8. } //由於一直為真,所以不斷將P3取反輸出到P2 9. } 注意:一個位元組的8位D7、D6至D0,分別輸出到P3.7、P3.6至P3.0,比如P3=0x0f,則P3.7、P3.6、P3.5、P3.4四個引腳都輸出低電平,而P3.3、P3.2、P3.1、P3.0四個引腳都輸出高電平。同樣,輸入一個埠P2,即是將P2.7、P2.6至P2.0,讀入到一個位元組的8位D7、D6至D0。 第一節:單數碼管按鍵顯示 單片機最小系統的硬體原理接線圖: 1. 接電源:VCC(PIN40)、GND(PIN20)。加接退耦電容0.1uF 2. 接晶體:X1(PIN18)、X2(PIN19)。注意標出晶體頻率(選用12MHz),還有輔助電容30pF 3. 接復位:RES(PIN9)。接上電復位電路,以及手動復位電路,分析復位工作原理 4. 接配置:EA(PIN31)。說明原因。 發光二極的控制:單片機I/O輸出 將一發光二極體LED的正極(陽極)接P1.1,LED的負極(陰極)接地GND。只要P1.1輸出高電平VCC,LED就正向導通(導通時LED上的壓降大於1V),有電流流過LED,至發LED發亮。實際上由於P1.1高電平輸出電阻為10K,起到輸出限流的作用,所以流過LED的電流小於(5V-1V)/10K = 0.4mA。只要P1.1輸出低電平GND,實際小於0.3V,LED就不能導通,結果LED不亮。 開關雙鍵的輸入:輸入先輸出高 一個按鍵KEY_ON接在P1.6與GND之間,另一個按鍵KEY_OFF接P1.7與GND之間,按KEY_ON後LED亮,按KEY_OFF後LED滅。同時按下LED半亮,LED保持後松開鍵的狀態,即ON亮OFF滅。 代碼 1. #include <at89x52.h> 2. #define LED P1^1 //用符號LED代替P1_1 3. #define KEY_ON P1^6 //用符號KEY_ON代替P1_6 4. #define KEY_OFF P1^7 //用符號KEY_OFF代替P1_7 5. void main( void ) //單片機復位後的執行入口,void表示空,無輸入參數,無返回值 6. { 7. KEY_ON = 1; //作為輸入,首先輸出高,接下KEY_ON,P1.6則接地為0,否則輸入為1 8. KEY_OFF = 1; //作為輸入,首先輸出高,接下KEY_OFF,P1.7則接地為0,否則輸入為1 9. While( 1 ) //永遠為真,所以永遠循環執行如下括弧內所有語句 10. { 11. if( KEY_ON==0 ) LED=1; //是KEY_ON接下,所示P1.1輸出高,LED亮 12. if( KEY_OFF==0 ) LED=0; //是KEY_OFF接下,所示P1.1輸出低,LED滅 13. } //松開鍵後,都不給LED賦值,所以LED保持最後按鍵狀態。 14. //同時按下時,LED不斷亮滅,各佔一半時間,交替頻率很快,由於人眼慣性,看上去為半亮態 15. } 數碼管的接法和驅動原理 一支七段數碼管實際由8個發光二極體構成,其中7個組形構成數字8的七段筆畫,所以稱為七段數碼管,而餘下的1個發光二極體作為小數點。作為習慣,分別給8個發光二極體標上記號:a,b,c,d,e,f,g,h。對應8的頂上一畫,按順時針方向排,中間一畫為g,小數點為h。 我們通常又將各二極與一個位元組的8位對應,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相應8個發光二極體正好與單片機一個埠Pn的8個引腳連接,這樣單片機就可以通過引腳輸出高低電平控制8個發光二極的亮與滅,從而顯示各種數字和符號;對應位元組,引腳接法為:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。 如果將8個發光二極體的負極(陰極)內接在一起,作為數碼管的一個引腳,這種數碼管則被稱為共陰數碼管,共同的引腳則稱為共陰極,8個正極則為段極。否則,如果是將正極(陽極)內接在一起引出的,則稱為共陽數碼管,共同的引腳則稱為共陽極,8個負極則為段極。 以單支共陰數碼管為例,可將段極接到某埠Pn,共陰極接GND,則可編寫出對應十六進制碼的七段碼表位元組數據
❾ (1小時學會C語言51單片機)C語言入門教程
51作為學習入門,確實是最最基礎的了,不過至少它可以讓一個新手明白控制是怎麼回事,反饋是怎麼回事,程序是怎麼下載進去運行,又是怎麼控制到io輸入輸出的,如何去訪問寄存器,掌握一套在嵌入式領悟最最基本的開發方法和學習思路。這部分如果有興趣,建議學習時間不要超過兩個月。
1.c語言,及部分匯編代碼
2.用一個月時間看完做完郭天祥的十天學會51單片機
3.買一塊開發板
4.學習能夠看懂看會原理圖
5.掌握搜集資料,datasheet查找閱讀英文手冊的能力
6.自己動手動手動手做一個簡單的功能
最後,我其實不建議51入門,可以直接stm32,雖然他還是單片機。不過十年前我當初也是51入門的,樂此不疲。至於忽悠你什麼協議,內核,我覺得讓一個大一嵌入式新手學這些,無疑沒有基礎就想建高樓,所以踏踏實實從基礎開始,大學就是注重基礎,學習能力!
❿ 51單片機C語言編程 求救啊 各位大仙!!!!!
1::你有模擬器嗎,可以用軟體protues試試,你的燈接在哪裡了?
假設你的燈接在了p0-p3,燈是共什麼極性的呢?共陰極0xff,共陽極為0x00;那麼可以寫為
#include<reg51.h>
void main()
{
while(1)
P0=0xff;
}
2::定時器的東西也是簡單的,實驗的晶振是多少啊,一般是12mhz的,那麼是1/1000ms了,好了,程序可以是這樣的
void init()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
tt++;
}
主函數自己寫,記得初始化init();
3::下面是1602的液晶顯示的例子
你自己看看pcf8576是什麼東西:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs = P2^4;
sbit rw = P2^5;
sbit lcden = P2^6;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P37=P3^7;
uchar i,j,k;
uchar code table[]=" 2009-08-04 THU";
uchar code table1[]=" 00:00:00 ";
/*延時函數*/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*顯示屏命令寫入函數*/
void write_com(uchar com)
{
rs=0;
rw=0;
lcden=1;
P0=com;
delay(5);
lcden=0;
}
/*顯示屏數據寫入函數*/
void write_data(uchar date)
{
rs=1;
rw=0;
lcden=1;
P0=date;
delay(5);
lcden=0;
}
/*顯示屏初始化函數*/
void init()
{
write_com(0x38); /*顯示模式設置*/ //該語句可有可無
delay(5); //該語句可有可無
write_com(0x38); //該語句可有可無
delay(5); //該語句可有可無
write_com(0x38); //該語句可有可無
delay(5); //該語句可有可無
write_com(0x38);
write_com(0x08); /*顯示關閉*/
write_com(0x01); /*顯示清屏*/
write_com(0x06); /*顯示游標移動設置*/
delay(5);
write_com(0x0C); /*顯示開及游標設置*/
write_com(0x80+15);
P37=1;
P20=1;
P21=1;
P22=1;
P0=0x00;
P37=0;
for(i=0;i<15;i++)
{
write_data(table[i]);
delay(5);
}
write_com(0x80+0x50);
for(j=0;j<14;j++)
{
write_data(table1[j]);
delay(5);
}
for(k=0;k<16;k++)
{
write_com(0x18);
delay(100);
}
}
/*主函數*/
void main()
{
init();
while(1);
}