久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3640|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

液晶顯示與串口通信

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:249943 發(fā)表于 2017-11-16 12:06 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1、CDIO設(shè)計(jì)目的
u  通過虛擬串口實(shí)現(xiàn)下位機(jī)與上位機(jī)之間的相互通信。
u  通過設(shè)計(jì)將串口通信的各種方式進(jìn)行進(jìn)一步的了解。
u  將接收的數(shù)字與發(fā)送的數(shù)字在LCD上進(jìn)行顯示,從而熟悉液晶顯示屏LCD1602的具體操作。
u  熟練掌握C語言在單片機(jī)上的編程應(yīng)用。
u  將各學(xué)科之間的的知識(shí)進(jìn)行綜合運(yùn)用,并能夠?qū)崿F(xiàn)所需的功能設(shè)計(jì)。
2、CDIO設(shè)計(jì)正文
2.1串口通信原理
串行通信是CPU與外界交換信息的一種基本通信方式。通信時(shí)僅需一到兩根傳輸線,且每次只能傳送一位,適用于長(zhǎng)距離傳輸,但速度較慢。MCS—51串行口是一個(gè)可編程的全雙工串行通信接口,其對(duì)應(yīng)的引腳為P3.0(10腳)和P3.1(11腳),分別為RXD和TXD,通過軟件編程它可以作通用異步收發(fā)器用,也可以做同步移位寄存器使用,其幀格式有8位、10位和11位3種,并能設(shè)置各種波特率。MCS—51串行口有兩個(gè)獨(dú)立的緩沖器,即發(fā)送緩沖器和接收緩沖器,且共用一個(gè)地址99H(SBUF)。同時(shí),MSC—51串行口可以用軟件設(shè)置成4種不同的工作方式。
2.1.1串行口的工作原理
通過對(duì)特殊功能寄存器—串行口控制寄存器中SM0、SM1兩位的操作,MCS—51單片機(jī)串口通信工作方式有4種,與串行口有關(guān)的特殊功能寄存器有串行口控制寄存器SCON、電源控制寄存器PCON和定時(shí)器T1,主要確定了串口通信的工作方式和波特率的計(jì)算方法。
(1)串行口數(shù)據(jù)緩沖器SBUF
SBUF是兩個(gè)在物理上相互獨(dú)立的接收,發(fā)送緩沖器,可同時(shí)發(fā)送,接收數(shù)據(jù),兩個(gè)緩沖器共用一個(gè)字節(jié)地址,為99H,可字節(jié)尋址,不可位尋址,復(fù)位值為00H。可通過編程對(duì)SBUF的讀寫來區(qū)別是對(duì)接收緩沖器的操作還是對(duì)發(fā)送緩沖器的操作。CPU寫SBUF,就是修改發(fā)送緩沖器;CPU讀SBUF,就是讀接收緩沖器,在硬件結(jié)構(gòu)上,串行口對(duì)外有兩條獨(dú)立的收發(fā)信號(hào)線RXD和TXD,因此可以同時(shí)發(fā)送,接收數(shù)據(jù),實(shí)現(xiàn)全雙工傳送。
(2)串行口控制寄存器SCON
SCON寄存器用于確定串行通信的工作方式、接收和發(fā)送控制、串行口的中斷狀態(tài)標(biāo)志,它既可以是字節(jié)尋址,也可以是位尋址,字地址為98H,其復(fù)位值為00H。
SM0,SM1—工作方式控制位,可構(gòu)成4種通信工作方式,分別為:方式0-同步移位寄存器;方式1-10位異步收發(fā);方式2-11位異步收發(fā);方式3-11位異步收發(fā)。
SM2—多機(jī)通信控制位,用于主一從式多機(jī)通信控制,因多機(jī)通信是在方式2和方式3下進(jìn)行,因此SM2位主要用于方式2和方式3。若SM2=1,則允許多機(jī)通信。若SM2=0,則不屬于多機(jī)通信情況,接收到一幀數(shù)據(jù)后,無論第9位(D8)是0還是1,都置中斷標(biāo)志RI=1,接收到的數(shù)據(jù)裝入接收/發(fā)送緩沖器(SBUF)中。
在工作方式1時(shí),若SM2=1,則只有接收到有效停止位時(shí)中斷標(biāo)志RI才置1,以便接收下一幀數(shù)據(jù);在工作方式0時(shí),SM2必須為0。
REN—允許接收控制位,用軟件置1或清零,REN=1,允許接收;REN=0,禁止接收。
   TB8—發(fā)送數(shù)據(jù)位8,在方式2和方式3時(shí),TB8是要發(fā)送的第9位數(shù)據(jù)。在多機(jī)通信中,以TB8位的狀態(tài)表示主機(jī)發(fā)送的是地址還是數(shù)據(jù):TB8=0為數(shù)據(jù),TB8=1為地址,該位由軟件置位或清零,此外,該位還可以作為數(shù)據(jù)的奇偶檢驗(yàn)位。
   RB8—接收數(shù)據(jù)位8,在工作方式2和工作方式3種,它是接收到的第9位數(shù)據(jù)位,既可以作為約定好的奇偶檢驗(yàn)位,也可以作為多機(jī)通信時(shí)的地址幀或數(shù)據(jù)幀標(biāo)志。在工作方式1中若SM2=0,則RB8是接收到的停止位,在工作方式0種不使用RB8。
TI—發(fā)送中斷標(biāo)志位,在工作方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置1,向CPU申請(qǐng)接收中斷,CPU響應(yīng)中斷后,必須用軟件清零;在其他方式下,在發(fā)送停止位前,由硬件置位。
RI—接收中斷標(biāo)志位。在工作方式0種,接收完8位數(shù)據(jù)后,由硬件置1,向CPU申請(qǐng)發(fā)送中斷,CPU響應(yīng)中斷后,必須用軟件清零;在其他方式下,在接收到停止位的中間時(shí)刻由硬件置1,中斷響應(yīng)后也必須用軟件清零。
串行發(fā)送中斷標(biāo)志位TI和接受中斷標(biāo)志位RI是同一個(gè)中斷源,在全雙工通信中,必須用軟件來判別是發(fā)送中斷請(qǐng)求還是接收中斷請(qǐng)求。
(3)電源控制寄存器PCON
   PCON主要是為CHMOS型單片機(jī)上實(shí)現(xiàn)電源控制而設(shè)置的專用寄存器,單元地址為87H其中只有一位SMOD與串行口工作有關(guān)。SMOD稱為波特率選擇位。在工作方式1,2,3中若SMOD=1,則波特率提高一倍;若SMOD=0,則波特率不加倍。
除了以上3種特殊功能寄存器以外,串口的工作還與定時(shí)器T1和中斷允許寄存器IE有關(guān),定時(shí)器T1主要在工作方式1,工作方式2中用于計(jì)算波特率,而IE主要用于接收/發(fā)送中斷的允許控制,ES=0,禁止串行中斷,ES=1,允許串行中斷。
2.1.2串行通信的波特率
在使用串口做通訊時(shí),一個(gè)很重要的參數(shù)就是波特率,只有上下位機(jī)的波特率一樣時(shí)才可以進(jìn)行正常通訊。波特率是指串行端口每秒內(nèi)可以傳輸?shù)牟ㄌ匚粩?shù)。51芯片的串口工作模式0的波特率是固定的,為fosc/12,以一個(gè)12M的晶振來計(jì)算,那么它的波特率可以達(dá)到1M。模式2的波特率是固定在fosc/64或fosc/32,具體用那一種就取決于PCON寄存器中的SMOD位,如SMOD為0,波特率為focs/64,SMOD為1,波特率為focs/32。模式1和模式3的波特率是可變的,取決于定時(shí)器1或2(52芯片)的溢出速率。計(jì)算這兩個(gè)模式的波特率可以用以下的公式去計(jì)算。
波特率=(2SMOD÷32)×定時(shí)器1溢出速率                (1)
上式中如設(shè)置了PCON寄存器中的SMOD位為1時(shí)就可以把波特率提升2倍。通常會(huì)使用定時(shí)器1工作在定時(shí)器工作模式2下,這時(shí)定時(shí)值中的TL1做為計(jì)數(shù),TH1做為自動(dòng)重裝值,這個(gè)定時(shí)模式下,定時(shí)器溢出后,TH1的值會(huì)自動(dòng)裝載到TL1,再次開始計(jì)數(shù),這樣可以不用軟件去干預(yù),使得定時(shí)更準(zhǔn)確。在這個(gè)定時(shí)模式2下定時(shí)器1溢出速率的計(jì)算公式如下:
溢出速率=(計(jì)數(shù)速率)/(256-TH1)                     (2)   
上式中的“計(jì)數(shù)速率”與所使用的晶體振蕩器頻率有關(guān),在51芯片中定時(shí)器啟動(dòng)后會(huì)在每一個(gè)機(jī)器周期使定時(shí)寄存器TH的值增加一,一個(gè)機(jī)器周期等于十二個(gè)振蕩周期,所以可以得知51芯片的計(jì)數(shù)速率為晶體振蕩器頻率的1/12,一個(gè)12M的晶振用在51芯片上,那么51的計(jì)數(shù)速率就為1M。通常用11.0592M晶體是為了得到標(biāo)準(zhǔn)的無誤差的波特率。如我們要得到9600的波特率,晶振為11.0592M和12M,定時(shí)器1為模式2,SMOD設(shè)為1,分別看看那所要求的TH1為何值。代入公式:
            11.0592M
            9600=(2÷32)×((11.0592M/12)/(256-TH1))
            TH1=250 
            12M
            9600=(2÷32)×((12M/12)/(256-TH1))
            TH1≈249.49
上面的計(jì)算可以看出使用12M晶體的時(shí)候計(jì)算出來的TH1不為整數(shù),而TH1的值只能取整數(shù),這樣它就會(huì)有一定的誤差存在不能產(chǎn)生精確的9600波特率。
本次設(shè)計(jì)中為了得到精確地波特率,采用的晶振頻率為11.0592MHz,此外定時(shí)器工作在方式2,即八位自動(dòng)重裝載,串口工作在方式1.
2.2接收與發(fā)送數(shù)據(jù)顯示
file:///C:/Users/Oraina/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg下位機(jī)發(fā)送的數(shù)據(jù)與上位機(jī)接受的數(shù)據(jù)都是通過LCD1602來進(jìn)行顯示的,其引腳圖如圖1所示。
圖1    LCD1602引腳圖
下位機(jī)發(fā)送的數(shù)據(jù)與上位機(jī)接受的數(shù)據(jù)都是通過LCD1602來進(jìn)行顯示的。1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表1所示:
表1:引腳接口說明表
  
編號(hào)
  
  
符號(hào)
  
  
引腳說明
  
  
編號(hào)
  
  
符號(hào)
  
  
引腳說明
  
  
1
  
  
VSS
  
  
電源地
  
  
9
  
  
D2
  
  
數(shù)據(jù)
  
  
2
  
  
VDD
  
  
電源正極
  
  
10
  
  
D3
  
  
數(shù)據(jù)
  
  
3
  
  
VL
  
  
液晶顯示偏壓
  
  
11
  
  
D4
  
  
數(shù)據(jù)
  
  
4
  
  
RS
  
  
數(shù)據(jù)/命令選擇
  
  
12
  
  
D5
  
  
數(shù)據(jù)
  
  
5
  
  
R/W
  
  
讀/寫選擇
  
  
13
  
  
D6
  
  
數(shù)據(jù)
  
  
6
  
  
E
  
  
使能信號(hào)
  
  
14
  
  
D7
  
  
數(shù)據(jù)
  
  
7
  
  
D0
  
  
數(shù)據(jù)
  
  
15
  
  
BLA
  
  
背光源正極
  
  
8
  
  
D1
  
  
數(shù)據(jù)
  
  
16
  
  
BLK
  
  
背光源負(fù)極
  
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度。
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
第15腳:背光源正極。
第16腳:背光源負(fù)極。
2.2.1  1602LCD的指令說明及時(shí)序
1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表2所示:
表2:控制命令表
  
序號(hào)
  
  
指令
  
  
RS
  
  
R/W
  
  
D7
  
  
D6
  
  
D5
  
  
D4
  
  
D3
  
  
D2
  
  
D1
  
  
D0
  
  
1
  
  
清顯示
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
2
  
  
光標(biāo)返回
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
*
  
  
3
  
  
置輸入模式
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
I/D
  
  
S
  
  
4
  
  
顯示開/關(guān)控制
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
D
  
  
C
  
  
B
  
  
5
  
  
光標(biāo)或字符移位
  
  
0
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
S/C
  
  
R/L
  
  
*
  
  
*
  
  
6
  
  
置功能
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
DL
  
  
N
  
  
F
  
  
*
  
  
*
  
  
7
  
  
置字符發(fā)生存貯器地址
  
  
0
  
  
0
  
  
0
  
  
1
  
  
字符發(fā)生存貯器地址
  
  
8
  
  
置數(shù)據(jù)存貯器地址
  
  
0
  
  
0
  
  
1
  
  
顯示數(shù)據(jù)存貯器地址
  
  
9
  
  
讀忙標(biāo)志或地址
  
  
0
  
  
1
  
  
BF
  
  
計(jì)數(shù)器地址
  
  
10
  
  
寫數(shù)到CGRAM或DDRAM)
  
  
1
  
  
0
  
  
要寫的數(shù)據(jù)內(nèi)容
  
  
11
  
  
從CGRAM或DDRAM讀數(shù)
  
  
1
  
  
1
  
  
讀出的數(shù)據(jù)內(nèi)容
  
1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的。(說明:1為高電平、0為低電平)
指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。
指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。
指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。
指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。
指令5:光標(biāo)或顯示移位 S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo)。
指令6:功能設(shè)置命令 DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線 N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示 F: 低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符。
指令7:字符發(fā)生器RAM地址設(shè)置。
指令8:DDRAM地址設(shè)置。
指令9:讀忙信號(hào)和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。
指令10:寫數(shù)據(jù)。
指令11:讀數(shù)據(jù)。
表3:基本操作時(shí)序表
  
讀狀態(tài)
  
  
輸入
  
  
RS=L,R/W=H,E=H
  
  
輸出
  
  
D0—D7=狀態(tài)字
  
  
寫指令
  
  
輸入
  
  
RS=L,R/W=L,D0—D7=指令碼,E=高脈沖
  
  
輸出
  
  
  
  
讀數(shù)據(jù)
  
  
輸入
  
  
RS=H,R/W=H,E=H
  
  
輸出
  
  
D0—D7=數(shù)據(jù)
  
  
寫數(shù)據(jù)
  
  
輸入
  
  
RS=H,R/W=L,D0—D7=數(shù)據(jù),E=高脈沖
  
  
輸出
  
  
  

file:///C:/Users/Oraina/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg

對(duì)LCD進(jìn)行些操作時(shí)的時(shí)序圖如圖2所示
圖2 寫操作時(shí)序
2.2.2  1602LCDRAM地址映射
液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖3是1602的內(nèi)部顯示地址。
例如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對(duì)液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。

file:///C:/Users/Oraina/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg

3  1602LCD內(nèi)部顯示地址
例如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在對(duì)液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。
2.2.3  1602LCD的一般初始化過程
延時(shí)15mS
寫指令38H(不檢測(cè)忙信號(hào))
延時(shí)5mS
寫指令38H(不檢測(cè)忙信號(hào))
延時(shí)5mS
寫指令38H(不檢測(cè)忙信號(hào))
以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測(cè)忙信號(hào)
寫指令38H:顯示模式設(shè)置
寫指令08H:顯示關(guān)閉
寫指令01H:顯示清屏
寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置
寫指令0CH:顯示開及光標(biāo)設(shè)置
2.3軟件設(shè)計(jì)
本次設(shè)計(jì)過程中當(dāng)接收到數(shù)據(jù)后CPU響應(yīng)中斷,對(duì)接接收到得數(shù)據(jù)進(jìn)行顯示后退出中斷,主函數(shù)以及中斷函數(shù)的流程圖如圖4與圖5所示。
file:///C:/Users/Oraina/AppData/Local/Temp/msohtmlclip1/01/clip_image007.giffile:///C:/Users/Oraina/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif
圖4   主函數(shù)流程圖                              圖5中斷流程圖
file:///C:/Users/Oraina/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
2.4硬件仿真及調(diào)試
圖6硬件設(shè)計(jì)總體仿真電路圖
由于本次設(shè)計(jì)只是仿真,并沒有進(jìn)行硬件電路的搭建,因此仿真時(shí)采用的是虛擬串口,通過軟件增加了一對(duì)虛擬串口COM1COM4,其設(shè)置界面如圖7所示。
file:///C:/Users/Oraina/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg
7 虛擬串口調(diào)試設(shè)置界面
當(dāng)仿真開始后下位機(jī)發(fā)送的數(shù)進(jìn)過虛擬串口發(fā)送上位機(jī)通過串口調(diào)試助手進(jìn)行數(shù)據(jù)的發(fā)送與接收,其,仿真時(shí)下位機(jī)與上位機(jī)的波特率均設(shè)置為9600,串口調(diào)試助手工作時(shí)界面如圖8所示。
file:///C:/Users/Oraina/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg
8  串口調(diào)試助手仿真界面
3CDIO設(shè)計(jì)總結(jié)
本次設(shè)計(jì)住實(shí)現(xiàn)了上位機(jī)與下位機(jī)之間簡(jiǎn)單的通信,上位機(jī)通過串口調(diào)試助手發(fā)送一個(gè)十六進(jìn)制的數(shù)經(jīng)過虛擬串口,可以被下位機(jī)接收,并在LCD進(jìn)行顯示。在老師講述單片機(jī)課程的時(shí)候,對(duì)單片機(jī)的串口通信知識(shí)進(jìn)行了原理上的簡(jiǎn)單了解,對(duì)實(shí)際應(yīng)用過程中應(yīng)考慮的一些問題并沒有過多的了解,通過本次設(shè)計(jì),對(duì)單片機(jī)串口通信這部分的內(nèi)容進(jìn)行了更深層次的學(xué)習(xí),知道了很多可是跟你學(xué)不到的東西。另外本次設(shè)計(jì)中,對(duì)收發(fā)的數(shù)據(jù)進(jìn)行顯示時(shí)用到了LCD液晶1602,剛開始學(xué)習(xí)是覺得液晶顯示很神奇,再設(shè)計(jì)過程中,通過自己看教學(xué)視頻進(jìn)行學(xué)習(xí),對(duì)液晶的原理,以及操作命令等有了比較詳細(xì)的了解。一開始進(jìn)行操作時(shí)由于對(duì)液晶顯示的時(shí)序不是很清楚,知識(shí)把液晶顯示的代碼簡(jiǎn)單的堆在了一起,結(jié)果運(yùn)行時(shí),液晶不能顯示。后來,自己仔細(xì)對(duì)1602的時(shí)序圖進(jìn)行學(xué)習(xí)后,才發(fā)現(xiàn)液晶初始化時(shí),每條命令都是有先后順序的。
總之,通過本次設(shè)計(jì)鍛煉了我查找錯(cuò)誤時(shí)的耐力,也是我對(duì)與C語言在單片機(jī)上的編程變得更加熟練,為以后進(jìn)一步學(xué)習(xí)打下了堅(jiān)實(shí)的基礎(chǔ)。
4、參考文獻(xiàn)
[1]康華光主編,電子技術(shù)基礎(chǔ)(數(shù)字部分)[M]北京:高等教育出版社,2000.6
[2]謝自美主編,電子線路設(shè)計(jì)/實(shí)驗(yàn)/測(cè)試[M]武漢:華中科技大學(xué)出版社,2000.7
[3]胡漢才.單片機(jī)原理與其接口技術(shù)(第二版)[M].北京:清華大學(xué)出版社,2004.
[4]彭偉,單片機(jī)C語言程序設(shè)計(jì)實(shí)例100例.電子工業(yè)出版社.2009,06
  
CDIO設(shè)計(jì)
  
評(píng)    語
  
課程設(shè)計(jì)
  
成    績(jī)
指導(dǎo)教師
  
(簽字)
  
            年    月    日
代碼:
#include<reg51.h>
#define ucharunsigned char
#define uintunsigned int
uchartable[10]="send data:";
uchartable1[13]="receive data:";
sbit lcden=P2^2;
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
uchar num,flag;
uchar c;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
// 寫命令子函數(shù)
voidwrite_cmd(uchar cmd)
{
        lcdrs=0;
       lcden=0;
        P0=cmd;
        lcdrw=0;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
       delay(5);
}
//寫數(shù)據(jù)子函數(shù)
void write_data(uchar dataa)
{
lcdrs=1;
P0=dataa;
//lcdrw=0;
delay(5);
lcden=1;
delay(5);
lcden=0;
  }
//液晶初始化
  void init()
{
  lcden=0;
  write_cmd(0x38);// 設(shè)置16*2顯示,5*7的點(diǎn)陣,8位數(shù)據(jù)口
  write_cmd(0x0c);//開顯示,不顯示光標(biāo)
  write_cmd(0x06);
  write_cmd(0x01);//清屏
  write_cmd(0x80);//初始化數(shù)據(jù)指針
for(num=0;num<10;num++)
   {
       write_data(table[num]);
       delay(5);
   }
write_cmd(0x80+0x40);
for(num=0;num<14;num++)
   {
       write_data(table1[num]);
       delay(5);
   }
}
void change()
{
       uchar m,n;
       m=c/16;
if(m<10)
   {m=m+0x30;}
else
   {m=m+0x37;}
       n=c%16;
  if(n<10)
      {n=n+0x30;}
    else
      {n=n+55;}
       write_cmd(0x80+0x0a);
       delay(5);
       write_data(m);
       delay(20);
        write_cmd(0x80+0x0b);
        delay(5);
        write_data(n);
        delay(20);
}
void change1(uchars)
{
uchar p,q;
q=s/16;
       if(q<10)
        {q=q+0x30;}
       else
        {q=q+0x37;}
  write_cmd(0x80+0x40+0x0d);
  delay(5);
  write_data(q);
  delay(20);
  p=s%16;
if(p<10)
  {p=p+0x30;}
else
  {p=p+0x37;}
write_cmd(0x80+0x40+0x0e);
delay(5);
write_data(p);
delay(20);
}
/********串行口初始化程序**********/
void init1()
{
       SM0=0;
       SM1=1;//設(shè)置為串行口工作方式1
       REN=1;// 允許串行口接收
       TI=0;
       RI=0;
       PCON=0;
       TH1=0xFD;
       TL1=0XFD;
       TMOD=0X20;//用作定時(shí)器,工作在方式2
       EA=1;
       ET1=0;
       ES=1;
       TR1=1;
}
//主函數(shù)
void main()
       {
     init();
     init1();
     
        while(1)
       {
              change();
              TI=0;
        SBUF=c;
         while(!TI);
              TI=0;
        delay(200);
        c++;
    }
       }
void intrr()interrupt 4
{  
    uchar temp;
    temp=SBUF;
       change1(temp);
    RI=0;
   
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:308395 發(fā)表于 2018-5-2 10:45 | 只看該作者
樓主,求仿真圖
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本视频免费 | 欧美精品二区 | 久久一区二区三区四区 | www国产亚洲精品久久网站 | 日韩中文字幕在线不卡 | 国产精品视频一区二区三区 | 国产乱码精品一区二三赶尸艳谈 | 看亚洲a级一级毛片 | 91麻豆精品一区二区三区 | 伊伊综合网 | a毛片视频网站 | 九九热精品视频 | 国产亚洲精品久久久久动 | 欧美日韩国产精品一区 | 国产高清在线观看 | 在线观看亚洲精品视频 | 国产美女福利在线观看 | 99热激情 | 国产精品永久免费观看 | 一区二区三区日韩 | 亚洲风情在线观看 | 成人免费福利视频 | 亚洲毛片在线观看 | 最新日韩在线视频 | 五月天国产视频 | 国产成人精品视频 | 国产精品久久一区二区三区 | 国产精品区一区二区三区 | 成人免费毛片片v | 最新中文字幕在线 | 国产精品免费一区二区 | 一级片在线播放 | 一级片网址 | 二区国产 | 81精品国产乱码久久久久久 | 欧美三区视频 | 性网址| 欧美综合一区二区 | 日韩在线免费 | 在线久草| 在线视频成人 |