熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2017-5-5 10:43
正文摘要:程序如下: #include <reg51.h> #define uint unsigned int #define uchar unsigned char sbit rs=P3^5; sbit rw=P3^6; sbit e=P3^7; uchar table; char en; /*uchar code table1[]="Huan Ying ... |
謝謝分享,我下個(gè)學(xué)習(xí)一下。 |
謝謝分享,我下個(gè)學(xué)習(xí)一下。 |
本帖最后由 zl2168 于 2017-5-7 20:38 編輯 實(shí)例67 LCD1602顯示屏顯示 本例編制的LCD 1602顯示程序標(biāo)準(zhǔn)化程度很好,若要顯示其他字符,只需給數(shù)組x[16]、y[16]重新賦值即可。 先Proteus仿真一下,確認(rèn)有效。 ![]() ![]() 以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil C和Proteus》清華大學(xué)出版社ISBN 978-7-302-41682-1 。書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。 仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書(shū)上看了。到圖書(shū)館借,或到新華書(shū)店翻閱,或到網(wǎng)上書(shū)店打折購(gòu)買(mǎi)。 |
#include <reg51.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char #define lcd_data P0 sbit RS=P2^5; sbit RW=P2^6; sbit E=P2^7; /*uchar code table1[]="Huan Ying Cheng Zuo"; uchar code table2[]="Li Gong Nan Yuan Dao Le"; uchar code table3[]="Li Gong Xue Yuan Dao Le"; uchar code table4[]="Hua ban Qiao Dao Le"; uchar code table5[]="Xie Xie Cheng Zuo"; */ uchar code table1[]="LCD1206 check ok"; uchar code table2[]="study up"; void lcd_w_cmd(unsigned char com); //寫(xiě)命令字函數(shù) void lcd_w_dat(unsigned char dat); //寫(xiě)數(shù)據(jù)函數(shù) unsigned char lcd_r_start(); //讀狀態(tài)函數(shù) void lcd_int1(); //LCD初始化函數(shù) void delay (uint n) { uint x,y; for(x=n;x>0;x--) for(y=110;y>0;y--); } void delay1() { _nop_(); _nop_(); _nop_(); } unsigned char lcd_r_start() { unsigned char s; RW=1; //RW=1,RS=0,讀LCD狀態(tài) delay1(); RS=0; delay1(); E=1; //E端時(shí)序 delay1(); s=lcd_data; //從LCD的數(shù)據(jù)口讀狀態(tài) delay1(); E=0; delay1(); RW=0; delay1(); return(s); //返回讀取的LCD狀態(tài)字 } //函數(shù)名:lcd_w_cmd //函數(shù)功能:寫(xiě)命令字 //形式參數(shù):命令字已存入com單元中 //返回值:無(wú) void lcd_w_cmd(unsigned char com) { unsigned char i; do { // 查L(zhǎng)CD忙操作 i=lcd_r_start(); // 調(diào)用讀狀態(tài)字函數(shù) i=i&0x80; // 與操作屏蔽掉低7位 delay(2); } while(i!=0); // LCD忙,繼續(xù)查詢,否則退出循環(huán) RW=0; delay1(); RS=0; // RW=1,RS=0,寫(xiě)LCD命令字 delay1(); E=1; //E端時(shí)序 delay1(); lcd_data=com; //將com中的命令字寫(xiě)入LCD數(shù)據(jù)口 delay1(); E=0; delay1(); RW=1; delay(255); } //函數(shù)名:lcd_w_dat //函數(shù)功能:寫(xiě)數(shù)據(jù) //形式參數(shù):數(shù)據(jù)已存入dat單元中 //返回值:無(wú) void lcd_w_dat(unsigned char dat) { unsigned char i; do { // 查忙操作 i=lcd_r_start(); // 調(diào)用讀狀態(tài)字函數(shù) i=i&0x80; // 與操作屏蔽掉低7位 delay(2); } while(i!=0); // LCD忙,繼續(xù)查詢,否則退出循環(huán) RW=0; delay1(); RS=1; // RW=1,RS=0,寫(xiě)LCD命令字 delay1(); E=1; // E端時(shí)序 delay1(); lcd_data=dat; // 將dat中的顯示數(shù)據(jù)寫(xiě)入LCD數(shù)據(jù)口 delay1(); E=0; delay1(); RW=1; delay(255); } void lcd_init() { lcd_w_cmd(0x38); // 設(shè)置工作方式 lcd_w_cmd(0x0c); // 設(shè)置光標(biāo) lcd_w_cmd(0x01); // 清屏 lcd_w_cmd(0x06); // 設(shè)置輸入方式 lcd_w_cmd(0x80); // 設(shè)置初始顯示位置 } void main() { uchar n,m=0; lcd_init(); lcd_w_cmd(0x80); for(m=0;m<16;m++) { lcd_w_dat(table1[m]); delay(200); } while(1) { lcd_w_cmd(0xC4); for(n=0;n<8;n++) { lcd_w_dat(table2[n]); delay(200); } } } 程序附上,你可以看看。我只改變了,使能端,你可以改。 |
1602.png (9.66 KB, 下載次數(shù): 48)
你的主程序不應(yīng)該寫(xiě)while(1);等待,還有你1602的各個(gè)函數(shù)有誤
Powered by 單片機(jī)教程網(wǎng)