熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2015-5-21 20:21
正文摘要:這是程序#include<reg51.h>#define LCD_data P0 sbit RS=P2^0; sbit RW=P2^1; sbit LCDE=P2^2; unsigned char m,miao,fen=12,shi=10; unsigned char line1[16]={" BEIJING TIME ... |
仿真不用查忙 |
仿真是不用查忙的,實(shí)物中需要。因?yàn)榉抡嬷袉纹瑱C(jī)速度沒有1602反應(yīng)快 |
其實(shí)不用查忙的,延時(shí)就行,忙這個(gè)條件有點(diǎn)苛刻 |
跪求,感覺好難! |
本帖最后由 zl2168 于 2017-5-7 14:43 編輯 實(shí)例91 具有校正功能的時(shí)鐘1302(LCD1602顯示) 先Proteus仿真,確認(rèn)有效。 ![]() ![]() 以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil C和Proteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,書中電路和程序設(shè)計(jì)有詳細(xì)說明,程序語句條條有注解。 仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。 |
同問求大佬茲磁 |
你看看你的接口順序?qū)?/td> |
TR0=0,未進(jìn)入中斷函數(shù) |
我寫的程序也是顯示亂碼。。。。。 |
TR0=0,未進(jìn)入中斷函數(shù) |
你的延時(shí)太多了 不用探忙的 |
初始化很重要 |
對(duì)于任何外設(shè)訪問都要探忙,但是好像跟你這個(gè)顯示的沒關(guān)系,你不能把程序模塊化了嗎,寫的很亂,到最后自己都不好改。 |
為什么要探忙,能解釋下嗎 |
wanglu071912 發(fā)表于 2015-5-24 10:42 對(duì)哦 謝謝哈 |
我自己是焊了個(gè)LCD1602的時(shí)鐘,就是不想看代碼,代碼風(fēng)格不一樣,很腦大的。我把我的LCD1602.c貼出來,宋老師的風(fēng)格,功能模塊化,好查錯(cuò),你對(duì)比分析一下吧,這個(gè).c是一定沒問題的。 #include<reg52.h> #define lcdDB P0 sbit lcdRS = P1^0; sbit lcdRW = P1^1; sbit lcdE = P1^5; void lcdready() //探忙 { unsigned char sta; lcdDB = 0xFF; lcdRS = 0; lcdRW = 1; do{ lcdE = 1; sta = lcdDB; lcdE = 0; }while(sta & 0x80); } void lcdwritecmd(unsigned char cmd) //寫入命令 { lcdready(); lcdRS = 0; lcdRW = 0; lcdDB = cmd; lcdE = 1; lcdE = 0; } void lcdwritedat(unsigned char dat) //寫入數(shù)據(jù) { lcdready(); lcdRS = 1; lcdRW = 0; lcdDB = dat; lcdE = 1; lcdE = 0; } void lcdsetaddr(unsigned char x, unsigned char y) //設(shè)置顯示位置 { unsigned char addr; if(y == 0) addr = 0x00 + x; else addr = 0x40 + x; lcdwritecmd(addr | 0x80); } void lcdshowstr(unsigned char x, unsigned char y, unsigned char *str) //顯示內(nèi)容 { lcdsetaddr(x, y); while(*str != '\0') { lcdwritedat(*str++); } } /*********************************************************** void lcdareaclear(unsigned char x, unsigned char y, unsigned char len) //局部清除 { lcdsetaddr(x, y); while(len--) { lcdwritedat(' '); } } void lcdfullclear() //整屏清除 { lcdwritecmd(0x01); } **********************************************************************/ void lcdgbss(unsigned char x, unsigned char y, bit gb) //光標(biāo)閃爍:1開0關(guān) { if(gb == 1) lcdwritecmd(0x0F); else lcdwritecmd(0x0C); lcdsetaddr(x, y); } void initlcd() //初始化 { lcdwritecmd(0x38); lcdwritecmd(0x0C); lcdwritecmd(0x06); lcdwritecmd(0x01); } |
參與人數(shù) 1 | 黑幣 +50 | 收起 理由 |
---|---|---|
![]() | + 50 | 共享資料的積分獎(jiǎng)勵(lì)! |
同問! |
Powered by 單片機(jī)教程網(wǎng)