51單片機結構簡單,架構體系完備,學習資料豐富,應用領域廣泛。通過對51單片機的學習,可幫助小白實現快速入門電子設計,理解電路系統工作原理,為高級嵌入式芯片的學習及開發打下堅實基礎。
本篇描述
1、51+Proteus8.10;
2、學習1302時鐘芯片、1602液晶驅動;
仿真設計
采用Proteus作為仿真設計工具。Proteus是一款著名的EDA工具(仿真軟件),從原理圖布圖、代碼調試到單片機與外圍電路協同仿真,真正實現了從概念到產品的完整設計。
軟件設計
采用Keil作為軟件設計工具。Keil提供了包括C編譯器、宏匯編、鏈接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案,通過一個集成開發環境(μ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); } }
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
單片機
+關注
關注
6043文章
44622瀏覽量
638523 -
液晶顯示
+關注
關注
6文章
588瀏覽量
40402 -
51單片機
+關注
關注
274文章
5705瀏覽量
124294 -
LCD1602
+關注
關注
14文章
607瀏覽量
52710 -
顯示時鐘
+關注
關注
0文章
5瀏覽量
1653
原文標題:5044-LCD1602液晶顯示時鐘
文章出處:【微信號:電子開發圈,微信公眾號:電子開發圈】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
LCD1602液晶顯示模塊
LCD1602內部寫入需要顯示的內容。RS=0時,選擇命令寄存區,即向LCD1602內部寫入需要顯示內容的顯示位置。R/W引腳:E引腳:D0
發表于 07-20 06:48
lcd1602與單片機連接圖,基于51單片機的lcd1602液晶顯示屏連接電路圖
LCD1602是一種工業字符型液晶,能夠同時顯示16x02即32個字符。LCD1602液晶顯示原理 L
發表于 10-20 11:33
?14.1w次閱讀
LCD1602的引腳說明和使用51單片機控制1602液晶顯示的代碼免費下載
本文檔的主要內容詳細介紹的是LCD1602的引腳說明和使用51單片機控制1602液晶顯示的代碼免費下載。
發表于 07-31 17:35
?9次下載
使用51單片機驅動LCD1602液晶顯示的程序和電路圖免費下載
本文檔的主要內容詳細介紹的是使用51單片機驅動LCD1602液晶顯示的程序和電路圖免費下載。
發表于 07-10 17:40
?11次下載
使用51單片機進行LCD1602液晶顯示的控制代碼程序免費下載
本文檔的主要內容詳細介紹的是使用51單片機進行LCD1602液晶顯示的控制代碼程序免費下載。
發表于 06-11 17:47
?8次下載
使用單片機實現LCD1602液晶顯示的DS12887實時時鐘的C語言程序
本文檔的主要內容詳細介紹的是使用單片機實現LCD1602液晶顯示的DS12887實時時鐘的C語言程序免費下載.
發表于 03-26 11:40
?26次下載
基于AT89C51單片機的電子鐘設計(LCD1602液晶顯示)
**基于51單片機的電子鐘設計(LCD1602液晶顯示)設計要求:設計一個用LCD1602液晶顯示
發表于 11-04 14:51
?35次下載
評論