51單片機(jī)結(jié)構(gòu)簡單,架構(gòu)體系完備,學(xué)習(xí)資料豐富,應(yīng)用領(lǐng)域廣泛。通過對51單片機(jī)的學(xué)習(xí),可幫助小白實(shí)現(xiàn)快速入門電子設(shè)計(jì),理解電路系統(tǒng)工作原理,為高級嵌入式芯片的學(xué)習(xí)及開發(fā)打下堅(jiān)實(shí)基礎(chǔ)。
本篇描述
1、51+Proteus8.10;
2、學(xué)習(xí)1302時(shí)鐘芯片、1602液晶驅(qū)動;
仿真設(shè)計(jì)
采用Proteus作為仿真設(shè)計(jì)工具。Proteus是一款著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。
軟件設(shè)計(jì)
采用Keil作為軟件設(shè)計(jì)工具。Keil提供了包括C編譯器、宏匯編、鏈接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(μVision)將這些部分組合在一起。
#include#include #include #define uint unsigned int #define uchar unsigned char sbit DS1302_IO = P1^7; sbit DS1302_SCLK = P1^6; sbit DS1302_RST = P1^5; sbit LCD1602_RS = P2^0; sbit LCD1602_RW = P2^1; sbit LCD1602_EN = P2^2; uchar LCD_1[]={"DATE: 00-00-00 "}; uchar LCD_2[]={"TIME: 0000 "}; uchar DateTime[7]; void DelayMS(uint ms) { uchar i; while(ms--) { for(i=0;i<120;i++); } } uchar Get_A_Byte_FROM_DS1302() { uchar i,b=0x00; for(i=0;i<8;i++) { b |= _crol_((uchar)DS1302_IO,i); DS1302_SCLK=1; DS1302_SCLK=0; } return b/16*10+b%16; } void Write_A_Byte_TO_DS1302(uchar x) { uchar i; for(i=0;i<8;i++) { DS1302_IO=x&0x01; DS1302_SCLK=1; DS1302_SCLK=0; x>>=1; } } uchar Read_Data(uchar addr) { uchar dat; DS1302_RST = 0; DS1302_SCLK=0; DS1302_RST=1; Write_A_Byte_TO_DS1302(addr); dat = Get_A_Byte_FROM_DS1302(); DS1302_SCLK=1; DS1302_RST=0; return dat; } uchar Read_LCD_State() { uchar state; LCD1602_RS=0; LCD1602_RW=1; LCD1602_EN=1; DelayMS(1); state=P0; LCD1602_EN = 0; DelayMS(1); return state; } void LCD_Busy_Wait() { while((Read_LCD_State()&0x80)==0x80); DelayMS(5); } void Write_LCD_Data(uchar dat) { LCD_Busy_Wait(); LCD1602_RS=1; LCD1602_RW=0; LCD1602_EN=0; P0=dat; LCD1602_EN=1; DelayMS(1); LCD1602_EN=0; } void Write_LCD_Command(uchar cmd) { LCD_Busy_Wait(); LCD1602_RS=0; LCD1602_RW=0; LCD1602_EN=0; P0=cmd; LCD1602_EN=1; DelayMS(1); LCD1602_EN=0; } void Set_LCD_POS(uchar p) { Write_LCD_Command(p|0x80); } void Display_LCD_String(uchar p,uchar *s) { uchar i; Set_LCD_POS(p); for(i=0;i<16;i++) { Write_LCD_Data(s[i]); DelayMS(1); } } void Format_DateTime(uchar d,uchar *a) { a[0]=d/10+'0'; a[1]=d%10+'0'; } void Init_LCD() { Write_LCD_Command(0x38); DelayMS(1); Write_LCD_Command(0x01); DelayMS(1); Write_LCD_Command(0x06); DelayMS(1); Write_LCD_Command(0x0c); DelayMS(1); } void GetTime() { uchar i,addr = 0x81; for(i=0;i<7;i++) { DateTime[i]=Read_Data(addr);addr+=2; } } void main() { Init_LCD(); while(1) { GetTime(); Format_DateTime(DateTime[6],LCD_1+6); Format_DateTime(DateTime[4],LCD_1+9); Format_DateTime(DateTime[3],LCD_1+12); Format_DateTime(DateTime[2],LCD_2+6); Format_DateTime(DateTime[1],LCD_2+9); Format_DateTime(DateTime[0],LCD_2+12); Display_LCD_String(0x00,LCD_1); Display_LCD_String(0x40,LCD_2); } }
審核編輯:湯梓紅
-
單片機(jī)
+關(guān)注
關(guān)注
6042文章
44617瀏覽量
637574 -
液晶顯示
+關(guān)注
關(guān)注
6文章
588瀏覽量
40371 -
51單片機(jī)
+關(guān)注
關(guān)注
274文章
5705瀏覽量
124078 -
LCD1602
+關(guān)注
關(guān)注
14文章
607瀏覽量
52660 -
顯示時(shí)鐘
+關(guān)注
關(guān)注
0文章
5瀏覽量
1652
原文標(biāo)題:5044-LCD1602液晶顯示時(shí)鐘
文章出處:【微信號:電子開發(fā)圈,微信公眾號:電子開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論