




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、用單片機(jī)IO口直接驅(qū)動(dòng)段式LCD的方法用IO口驅(qū)動(dòng)段式LED(數(shù)碼管)的方法相信大家比較清楚,但用IO口直接驅(qū)動(dòng)段式LCD的方法相對(duì)復(fù)雜一些。在網(wǎng)上搜了一下單片機(jī)IO口驅(qū)動(dòng)段式LCD的方法,大部分資料講得不夠清晰、具體,而且簡(jiǎn)單問(wèn)題復(fù)雜化。后來(lái)查了LCD的顯示原理,結(jié)合網(wǎng)上的相關(guān)介紹,發(fā)現(xiàn)IO口直接驅(qū)動(dòng)段式LCD原理比較簡(jiǎn)單,用幾句話就可以描述清楚: 1. LCD和LED的顯示原理不一樣:LED是加正向電壓發(fā)光,而LCD必須交替加正、反向電壓才會(huì)持續(xù)顯示(可以做個(gè)實(shí)驗(yàn),如果把恒定電壓加到LCD的一段上,該段會(huì)顯示
2、一下,但馬上不能顯示,而且長(zhǎng)時(shí)間加恒定電壓,會(huì)加速LCD的老化和損壞)2. 常聽(tīng)說(shuō)1/2bias,1/3bias LCD,是什么意思呢?對(duì)于1/2bias LCD,假如LCD的顯示電壓是3V,則1/2bias是1.5V,也就是說(shuō)在±3V電壓作用時(shí),LCD有顯示;±1.5V及以下的電壓作用時(shí)沒(méi)有顯示3. 普通單片機(jī)IO口不能直接輸出半高電平(1.5V),但可以用相等的上下拉電阻實(shí)現(xiàn),當(dāng)IO口設(shè)置為輸入(高阻)時(shí),由于上下拉電阻的分壓作
3、用,則產(chǎn)生一個(gè)半高電平(1.5V) 知道了以上3點(diǎn)后,動(dòng)態(tài)驅(qū)動(dòng)LCD就不是難事了,對(duì)于4*8段的LCD(4個(gè)COM,8個(gè)SEG,顯示電壓為3V,1/2bias),驅(qū)動(dòng)方法如下:1、 四個(gè)COM采用交替掃描的方式,每個(gè)COM在相鄰兩次掃描時(shí)又進(jìn)行電壓交變的方式。2、 若掃描到某一個(gè)COM時(shí),該COM輸出3V(0V):與該COM相連的SEG輸出與COM相反,V=±3V,則該相連點(diǎn)亮;與該COM相連的SEG輸出與COM相同,V=0,則該相連點(diǎn)不亮。3、其他沒(méi)有掃描到的COM,單片機(jī)IO口為輸入,從而產(chǎn)生1/2 bias(1.5V),不管SEG為何值,V&l
4、t;±1.5V,故該點(diǎn)不亮。 本人用4*8段的LCD自制了一個(gè)數(shù)字鐘表,驗(yàn)證了以上方法的可行性,現(xiàn)把制作過(guò)程羅列如下1. 原理圖說(shuō)明:由于管腳不夠用,所以時(shí)鐘芯片DS1302的RST和LCD的一個(gè)SEG是復(fù)用的,只要在這個(gè)SEG無(wú)效的時(shí)候去讀取時(shí)間就可以了,另外,3PIN串口是ISP下載程序用的。2. 備料 3. 焊接4.
5、60; 實(shí)驗(yàn)結(jié)果5. 不足之處通過(guò)實(shí)驗(yàn)結(jié)果可以發(fā)現(xiàn),不顯示的SEG也有陰影原因分析:紐扣電池電壓3.7V,1/2bias是1.85V,大于1.5V,所以會(huì)出現(xiàn)陰影。解決辦法:選擇工作電壓小于3V的單片機(jī)和電壓等于3V的電池(如2節(jié)干電池)6. 程序源代碼 點(diǎn)擊代碼/*段式LCD驅(qū)動(dòng)實(shí)驗(yàn) 外部晶體:12MHz 作者: 郵箱:wang9601 日期:2011.08.26 */#include <reg52.h>#include <stdio.h>/管腳定義sbit C
6、OM0=P35;sbit COM1=P34;sbit COM2=P33;sbit COM3=P32;sbit BI_4=P37;sbit RTC_CLK=P30;sbit RTC_IO=P31;sbit RTC_RST=P37; /復(fù)用/P3口模式寄存器sfr P3M1=0xb1;sfr P3M0=0xb2;/當(dāng)前時(shí)間(BCD碼):秒、分、時(shí)、日、月、星期、年unsigned char ClockBuffer8=0x34,0x12,0x08,0x20,0x03,0x05,0x09;/09的段碼查詢表/位序 D7 D6 D5 D4 D3 D2 D1 D0/段 A B C D E F G DOT
7、code unsigned char seg_code10=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09;unsigned char ScanCoun=0; /動(dòng)態(tài)掃描顯示位數(shù)計(jì)數(shù)器unsigned char DisplayBuf4=1,2,3,4; /4位數(shù)字對(duì)應(yīng)的顯示暫存/段碼緩沖區(qū)unsigned char SegBuf4=0x00,0x00,0x00,0x00;/COM1、COM2、COM3、COM4的段碼bit bi_4a=0; /COM0對(duì)應(yīng)的4abit bi_4b=0; /COM1對(duì)應(yīng)的4abit bi_4c=0; /COM2
8、對(duì)應(yīng)的4a/延時(shí)void dly(unsigned char x) unsigned char i; for (i=0; i<x; i+); /ds1302寫1字節(jié)void rtc_wt_byte(unsigned char sent_buf) unsigned char i; for (i=0; i<8; i+) RTC_CLK=0; if (sent_buf&0x01) RTC_IO=1; else RTC_IO=0; RTC_CLK=1; dly(5); sent_buf=sent_buf>>1; RTC_CLK=0; dly(5); /ds1302讀1字
9、節(jié)unsigned char rtc_rd_byte(void) unsigned char i,read_buf; RTC_IO=1; /RTC_IO置1,保證為輸入狀態(tài) for (i=0; i<8; i+) read_buf=read_buf>>1; RTC_CLK=0; dly(5); if (RTC_IO) read_buf=read_buf|0x80; else read_buf=read_buf&0x7f; RTC_CLK=1; dly(5); RTC_CLK=0; dly(5); return read_buf; /ds1302寫入時(shí)間void rtc_
10、wr_time(unsigned char *p_wt_time) unsigned char i; unsigned char tmp1; dly(30); RTC_RST=1; rtc_wt_byte(0xbe); /burst寫入時(shí)間 for (i=0; i<8; i+) tmp1=*p_wt_time+; rtc_wt_byte(tmp1); RTC_CLK=0; RTC_RST=0; /ds1302讀出時(shí)間void rtc_rd_time(unsigned char *p_rd_time) unsigned char i; unsigned char tmp1; dly(30)
11、; RTC_RST=1; rtc_wt_byte(0xbf); /burst讀取時(shí)間 RTC_IO=1; for (i=0; i<8; i+) tmp1=rtc_rd_byte(); *p_rd_time+=tmp1; RTC_CLK=0; RTC_RST=0; /ds1302初始化void ini_rtc() RTC_CLK=0; RTC_RST=0; dly(30); RTC_RST=1; rtc_wt_byte(0x8e); /寫CONTROL寄存器 rtc_wt_byte(0x00); /值:去掉寫保護(hù) RTC_RST=0; /復(fù)位 RTC_RST=1; /正常工作 rtc_wt
12、_byte(0x90); /寫TRICKLE CHARGER寄存器 rtc_wt_byte(0xa9); /值:使能充電,串聯(lián)2個(gè)二極管,串聯(lián)2k歐姆的電阻 RTC_CLK=0; RTC_RST=0; /把4位數(shù)字的SEG放到COM1、COM2、COM3、COM4對(duì)應(yīng)的段碼/LCD的管腳定義與LED不同,它不是一個(gè)COM對(duì)應(yīng)一位數(shù)字,而是對(duì)應(yīng)每個(gè)數(shù)字的一部分SEG/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 / < 1f 1a 2f 2a 3f 3a 4f 4a > - - COM0 / < 1g 1b 2g 2b 2g 3b 4g 4b >
13、; - - COM1 / < 1e 1c 2e 2c : 3e 3c 4e 4c > - - COM2 / 1d 1h 2d 2h 3d 3h 4d - - COM3void Seg2Seg()unsigned char SegXX; SegBuf0=0; SegBuf1=0; SegBuf2=0x08; SegBuf3=0; bi_4a=0; bi_4b=0; bi_4c=0; SegXX=seg_codeDisplayBuf0; /第1位數(shù)字 if (SegXX&0x80) SegBuf0|=0x40; if (SegXX&0x40) SegBuf1|=0x40
14、; if (SegXX&0x20) SegBuf2|=0x40; if (SegXX&0x10) SegBuf3|=0x80; if (SegXX&0x08) SegBuf2|=0x80; if (SegXX&0x04) SegBuf0|=0x80; if (SegXX&0x02) SegBuf1|=0x80; if (SegXX&0x01) SegBuf3|=0x40; SegXX=seg_codeDisplayBuf1; /第2位數(shù)字 if (SegXX&0x80) SegBuf0|=0x10; if (SegXX&0x40)
15、 SegBuf1|=0x10; if (SegXX&0x20) SegBuf2|=0x10; if (SegXX&0x10) SegBuf3|=0x20; if (SegXX&0x08) SegBuf2|=0x20; if (SegXX&0x04) SegBuf0|=0x20; if (SegXX&0x02) SegBuf1|=0x20; if (SegXX&0x01) SegBuf3|=0x10; SegXX=seg_codeDisplayBuf2; /第3位數(shù)字 if (SegXX&0x80) SegBuf0|=0x02; if (S
16、egXX&0x40) SegBuf1|=0x02; if (SegXX&0x20) SegBuf2|=0x02; if (SegXX&0x10) SegBuf3|=0x04; if (SegXX&0x08) SegBuf2|=0x04; if (SegXX&0x04) SegBuf0|=0x04; if (SegXX&0x02) SegBuf1|=0x04; if (SegXX&0x01) SegBuf3|=0x02; SegXX=seg_codeDisplayBuf3; /第4位數(shù)字 if (SegXX&0x80) bi_4a=
17、1; if (SegXX&0x40) bi_4b=1; if (SegXX&0x20) bi_4c=1; if (SegXX&0x10) SegBuf3|=0x01; if (SegXX&0x08) SegBuf2|=0x01; if (SegXX&0x04) SegBuf0|=0x01; if (SegXX&0x02) SegBuf1|=0x01;/*一個(gè)BCD碼轉(zhuǎn)化成兩個(gè)十進(jìn)制數(shù)(如:0x79轉(zhuǎn)化成0x07和0x09)*/BcdToDec(unsigned char BcdValue,unsigned char *pDecValue) /if
18、 (BcdValue>=0x9a|(BcdValue&0x0f)>=0x0a) return 0; *pDecValue+=(BcdValue&0xf0)>>4; *pDecValue=BcdValue&0x0f; /return 1; /初始化MCS51內(nèi)部資源InitInterResource() IE=0; /關(guān)全部中斷 TCON=0; /清全部中斷請(qǐng)求 IP=0; /清中斷優(yōu)先級(jí) TMOD=0x01; /T0工作方式1(16位定時(shí)器) TH0=0x00; /T0定時(shí)器輔初值 TL0=0x00; TR0=1; /允許T0定時(shí) ET0=1;
19、/允許T0中斷 EA=0; /關(guān)全局中斷 RTC_RST=0; void main() InitInterResource(); ini_rtc(); /初始化DS1302 rtc_wr_time(ClockBuffer); /寫入時(shí)間初始值 EA=1; /開(kāi)全局中斷 while(1) /定時(shí)器0中斷服務(wù)程序,5ms定時(shí)器,4位數(shù)碼管動(dòng)態(tài)顯示驅(qū)動(dòng)void tmr0_p(void) interrupt 1 TL0=0x78; /重新定時(shí)5ms TH0=0xec; Seg2Seg(); P3M1=0x3c; P3M0=0x00; switch(ScanCoun) /動(dòng)態(tài)掃描顯示 case 0: /COM0正向驅(qū)動(dòng) P1= SegBuf0; BI_4= bi_4a; COM0=0; P3M1=0x1c; /除COM0輸出外,其余COM設(shè)為輸入 P3M0=0x00; break; case 1: /COM0反向驅(qū)動(dòng) P1= SegBuf0; BI_4= bi_4a; COM0=1; P3M1=0x1c; P3M0=0x00; break;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 4.1中國(guó)特色社會(huì)主義進(jìn)入新時(shí)代 教學(xué)設(shè)計(jì) 統(tǒng)編版高中思想政治必修1中國(guó)特色社會(huì)主義
- 2025年杭州市稅務(wù)系統(tǒng)遴選面試真題帶詳解含答案
- 某醫(yī)院車輛管理制度
- 流時(shí)空數(shù)據(jù)處理與分析
- 2025年安徽科技學(xué)院005機(jī)械工程學(xué)院085500機(jī)械考研報(bào)錄數(shù)據(jù)分析報(bào)告初
- 撤場(chǎng)施工安全協(xié)議書范文
- 茶葉電商直播帶貨與品牌合作合同
- 特色餐廳員工派遣與餐飲服務(wù)品質(zhì)提升合同
- 成華區(qū)房產(chǎn)銷售無(wú)責(zé)任底薪銷售團(tuán)隊(duì)激勵(lì)機(jī)制合同
- 保險(xiǎn)數(shù)據(jù)挖掘精算合同
- 路面銑刨工入場(chǎng)安全教育試卷(含答案)
- 2024大華網(wǎng)絡(luò)攝像機(jī)使用說(shuō)明書全集
- T/CNFAGS 15-2024綠色合成氨分級(jí)標(biāo)準(zhǔn)(試行)
- 污水處理員技能培訓(xùn)課件
- 全科規(guī)培考試試題及答案
- 《貝聿銘建筑設(shè)計(jì)》課件
- 2025-2030熒光原位雜交(FISH)探針行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 早產(chǎn)兒腦室內(nèi)出血預(yù)防專家共識(shí)(2025)解讀課件
- 成人機(jī)械通氣患者俯臥位護(hù)理
- 熱工測(cè)量及儀表基礎(chǔ)知識(shí)
- 2024年河南洛陽(yáng)文旅集團(tuán)財(cái)務(wù)崗位招聘筆試真題
評(píng)論
0/150
提交評(píng)論