




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、總體設(shè)計(jì)1.實(shí)現(xiàn)功能:用單片機(jī)的串口模擬短信的收發(fā),當(dāng)A主機(jī)要向B主機(jī)發(fā)送一行字符串時(shí),首先A主機(jī)把這行字符串打印到1602LCD液晶屏幕上,當(dāng)A主機(jī)按發(fā)送按鍵的時(shí)候,A主機(jī)向B主機(jī)發(fā)送一行字符串,這時(shí)字符串會(huì)通過串口發(fā)送到B主機(jī)上,當(dāng)B主機(jī)收到字符串時(shí),會(huì)在1602LCD液晶屏幕上把字符串打印出來,這時(shí)按下B主機(jī)上的接受按鍵,B主機(jī)會(huì)把要發(fā)送的字符串,打印到B主機(jī)的1602LCD液晶屏幕上,按下B主機(jī)的發(fā)送按鍵,這時(shí)B主機(jī)會(huì)通過串口向A主機(jī)發(fā)送字符串。最后用兩個(gè)矩陣鍵盤模擬發(fā)送短信用的字母鍵盤,A主機(jī)可以通過矩陣鍵盤輸入想要發(fā)送的數(shù)據(jù),然后按發(fā)送按鍵發(fā)送,同樣B主機(jī)也可以通過矩陣鍵盤輸入
2、信息,然后通過發(fā)送按鍵發(fā)送。2. 設(shè)計(jì)方案:首先把兩個(gè)ATS89C51各自連接成單片機(jī)最小系統(tǒng),在把他們的TXD、RXD口分別與MAX232相連,然后一個(gè)MAX232的T1out和R1IN ,分別與另一個(gè)MAX232的R1IN和T1out相連,P0口接矩陣鍵盤,P1口接液晶顯示的數(shù)據(jù)端??偟碾娐穲D如圖:圖1、總電路圖二、設(shè)計(jì)基礎(chǔ)1.單片機(jī)串行口通信方式圖2.AT89C51計(jì)算機(jī)與外界的信息交換稱為通信,常用的通信方式有兩種:并行通信和串行通信。51單片機(jī)用4個(gè)接口與外界進(jìn)行數(shù)據(jù)輸入與數(shù)據(jù)輸出就是并行通信,并行通信的特點(diǎn)是傳輸信號(hào)的速度快,但所用的信號(hào)線較多,成本高,傳輸?shù)木嚯x較近。串行通信的特
3、點(diǎn)是只用兩條信號(hào)線(一條信號(hào)線,再加一條地線作為信號(hào)回路)即可完成通信,成本低,傳輸?shù)木嚯x較遠(yuǎn)。51單片機(jī)的串行接口是一個(gè)全雙工的接口,它可以作為UART(通用異步接受和發(fā)送器)用,也可以作為同步移位寄存器用。51單片機(jī)串行接口的結(jié)構(gòu)如下:(1)數(shù)據(jù)緩沖器(SBUF)接受或發(fā)送的數(shù)據(jù)都要先送到SBUF緩存。有兩個(gè),一個(gè)緩存,另一個(gè)接受,用同一個(gè)接地址99H,發(fā)送時(shí)用指令將數(shù)據(jù)送到SBUF即可啟動(dòng)發(fā)送;接收時(shí)用指令將SBUF中接收到的數(shù)據(jù)取出。(2)串行控制寄存器(PCON)SCON用于串行通信方式的選擇,收發(fā)控制及狀態(tài)指示,各位含義如下:SM0SM1SM2RENTB8RB8TIRISM0,SM
4、1:串行接口工作方式選擇位,這兩位組合成00,01,10,11對(duì)應(yīng)于工作方式0、1、2、3。串行接口工作方式特點(diǎn)見下表SM0SM1工作方式功能波特率 0008位同步移位寄存器(用于I/O擴(kuò)展)fORC/1201110位異步串行通信(UART)可變(T1溢出率*2SMOD/32)10211位異步串行通信(UART)fORC/64或fORC/3211311位異步串行通信(UART)可變(T1溢出率*2SMOD/32)SM2:多機(jī)通信控制位。REN:接收允許控制位。軟件置1允許接收;軟件置0禁止接收。TB8:方式2或3時(shí),TB8為要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置1或清0。RB8:在方式2或3時(shí),
5、RB8位接收到的第9位數(shù)據(jù),實(shí)際為主機(jī)發(fā)送的第9位數(shù)據(jù)TB8,使從機(jī)根據(jù)這一位來判斷主機(jī)發(fā)送的時(shí)呼叫地址還是要傳送的數(shù)據(jù)。TI:發(fā)送中斷標(biāo)志。發(fā)送完一幀數(shù)據(jù)后由硬件自動(dòng)置位,并申請(qǐng)中斷。必須要軟件清零后才能繼續(xù)發(fā)送。RI:接收中斷標(biāo)志。接收完一幀數(shù)據(jù)后由硬件自動(dòng)置位,并申請(qǐng)中斷。必須要軟件清零后才能繼續(xù)接收。(3)輸入移位寄存器接收的數(shù)據(jù)先串行進(jìn)入輸入移位寄存器,8位數(shù)據(jù)全移入后,再并行送入接收SBUF中。(4)波特率發(fā)生器波特率發(fā)生器用來控制串行通信的數(shù)據(jù)傳輸速率的,51系列單片機(jī)用定時(shí)器T1作為波特率發(fā)生器,T1設(shè)置在定時(shí)方式。波特率用來表示串行通信數(shù)據(jù)傳輸快慢程度的物理量,定義為每秒鐘傳
6、送的數(shù)據(jù)位數(shù)。(5)電源控制寄存器PCON,其最高位為SMOD。(6)波特率計(jì)算對(duì)于方式1和方式3,波特率都是由定時(shí)器1的溢出率決定,計(jì)算公式如下:定時(shí)器T1工作于方式0時(shí),k=13;定時(shí)器T1工作于方式1時(shí),k=16;定時(shí)器T1工作于方式2和方式3,k=8;2、1602LCD操作(1)1602LCD特性:+5V電壓,對(duì)比度可調(diào)內(nèi)含復(fù)位電路提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能有80字節(jié)顯示數(shù)據(jù)存儲(chǔ)器DDRAM內(nèi)建有160個(gè)5X7點(diǎn)陣的字型的字符發(fā)生器CGROM8個(gè)可由用戶自定義的5X7的字符發(fā)生器CGRAM字符型LCD1602通常有14條引腳線或16條引腳線的LC
7、D,多出來的2條線是背光電源線VCC(15腳)和地線GND(16腳)圖3、1602各引腳的定義HD44780內(nèi)置了DDRAM(顯示數(shù)據(jù)存儲(chǔ)RAM)、CGROM(字符存儲(chǔ)ROM)和CGRAM(用戶自定義RAM)。 DDRAM就是顯示數(shù)據(jù)RAM,用來寄存待顯示的字符代碼。共80個(gè)字節(jié),其地址和屏幕的對(duì)應(yīng)關(guān)系如下表: 也就是說想要在LCD1602屏幕的第一行第一列顯示一個(gè)“A”字,就要向DDRAM的00H地址寫入“A”的代碼就行了。但具體的寫入是要按LCD模塊的指令格式來進(jìn)行的,后面我會(huì)講到的。一行有40個(gè)地址 在1602中我們就用前16個(gè)就行了。第二行也一樣用前16個(gè)地址。對(duì)應(yīng)如下:
8、DDRAM地址與顯示位置的對(duì)應(yīng)關(guān)系 1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如下表所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常 用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn) 陣字符圖形顯示出來,我們就能看到字母“A”圖4、1602字符表上表中的字符代碼與我們PC中的字符代碼是基本一致的。因此我們?cè)谙駾DRAM寫C51字符代碼程序時(shí)甚至可以直接用P1'A'這樣的方法。PC在編譯時(shí)就把“A”先轉(zhuǎn)為41H代碼了。字符代碼0x000x
9、0F為用戶自定義的字符圖形RAM(對(duì)于5X8點(diǎn)陣的字符,可以存放8組),就是CGRAM了。對(duì)DDRAM的內(nèi)容和地址操作,HD44780的指令集及其設(shè)置說明,共有11條指令:基本操作時(shí)序: 讀狀態(tài) 輸入:RS=L,RW=H,E=H 輸出:DB0
10、DB7=狀態(tài)字 寫指令 輸入:RS=L,RW=L,E=下降沿脈沖,DB0DB7=指令碼 輸出:無 讀數(shù)據(jù) 輸入:RS=H,RW=H,E=H
11、60; 輸出:DB0DB7=數(shù)據(jù) 寫數(shù)據(jù) 輸入:RS=H,RW=L,E=下降沿脈沖,DB0DB7=數(shù)據(jù) 輸出:無 1.清屏指令 功能:<1> 清除液晶顯示器,即將DDRAM的內(nèi)容全部填入“空白”的字符碼20H; <2> 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方; <3> 將地址計(jì)數(shù)器(A
12、C)的值設(shè)為0。 2.光標(biāo)歸位指令 功能:<1> 把光標(biāo)撤回到顯示器的左上方; <2> 把地址計(jì)數(shù)器(AC)的值設(shè)置為0; <3> 保持DDRAM的內(nèi)容不變 3.輸入模式設(shè)置指令 功能:設(shè)定每次寫入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示: 位名 設(shè)置 I/D
13、; 0=寫入新數(shù)據(jù)后光標(biāo)左移 1=寫入新數(shù)據(jù)后光標(biāo)右移 S 0=寫入新數(shù)據(jù)后顯示屏不移動(dòng) 1=寫入新數(shù)據(jù)后顯示屏整體右移1個(gè)字 4. 顯示開關(guān)控制指令功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。參數(shù)設(shè)定的情況如下: 位名
14、 設(shè)置 D 0=顯示功能關(guān) 1=顯示功能開 C
15、60; 0=無光標(biāo) 1=有光標(biāo) B 0=光標(biāo)不閃爍 &
16、#160; 1=光標(biāo)閃爍 5. 設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令 功能:使光標(biāo)移位或使整個(gè)顯示屏幕移位。參數(shù)設(shè)定的情況如下: S/C R/L 設(shè)定情況 0
17、0; 0 光標(biāo)左移1格,且AC值減1 0 1
18、60; 光標(biāo)右移1格,且AC值加1 1 0 顯示器上字符全部左移一格,但光標(biāo)不動(dòng) 1 1
19、 顯示器上字符全部右移一格,但光標(biāo)不動(dòng) 6.功能設(shè)定指令 功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。參數(shù)設(shè)定的情況如下: 位名 設(shè)置 DL
20、; 0=數(shù)據(jù)總線為4位 1=數(shù)據(jù)總線為8位 N 0=顯示1行 1=顯示2行 F
21、60; 0=5×7點(diǎn)陣/每字符 1=5×10點(diǎn)陣/每字符 7.設(shè)定CGRAM地址指令功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的CGRAM的地址。8.設(shè)定DDRAM地址指令 功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的C
22、GRAM的地址。 (注意這里我們送地址的時(shí)候應(yīng)該是0x80+Address,這也是前面說到寫地址命令的時(shí)候要加上0x80的原因) 9.讀取忙信號(hào)或AC地址指令 功能:<1> 讀取忙碌信號(hào)BF的內(nèi)容,BF=1表示液晶顯示器忙,暫時(shí)無法接收單片機(jī)送來的數(shù)據(jù)或指令; 當(dāng)BF=0時(shí),液晶顯示器可以接收單片機(jī)送來的數(shù)據(jù)或指令; <2> 讀取地址計(jì)數(shù)器(AC)的內(nèi)容。 10.數(shù)據(jù)寫入DDRAM或CGRAM指令 功能:<1> 將字符碼寫入DDRAM,以使液晶顯示屏顯示出相對(duì)應(yīng)的字符; <2> 將用戶自己設(shè)計(jì)的圖形存入CGRAM。 11.從CGRAM或DDRAM
23、讀出數(shù)據(jù)的指令功能:讀取DDRAM或CGRAM中的內(nèi)容。 基本操作時(shí)序: 讀狀態(tài) 輸入:RS=L,RW=H,E=H 輸出:DB0DB7=狀態(tài)字 寫指令 輸入:RS=L,RW=L,E=下降沿脈沖,DB0DB7=指令碼 輸出:無 讀數(shù)據(jù)
24、; 輸入:RS=H,RW=H,E=H 輸出:DB0DB7=數(shù)據(jù) 寫數(shù)據(jù) 輸入:RS=H,RW=L,E=下降沿脈沖,DB0DB7=數(shù)據(jù) 輸出:無 2.MAX232芯片用8051串行接口通信,如果兩臺(tái)8051單片機(jī)之間的距離很近(不超過1.5m),可以采用直接將兩臺(tái)8051單片機(jī)的串行接口直接相連,利用其自身的TTL電平(0-5V)直接傳輸數(shù)據(jù)信息。如
25、果傳輸距離較遠(yuǎn)(超過1.5m),由于傳輸線的阻抗與分布電容,會(huì)產(chǎn)生電平損耗和波形畸變,以至于檢測(cè)不出數(shù)據(jù)或數(shù)據(jù)出錯(cuò)。此時(shí)可利用 RS232標(biāo)準(zhǔn)總線接口,將單片機(jī)輸出的TTL電平轉(zhuǎn)換為RS232標(biāo)準(zhǔn)電平(邏輯1為-15-5V;邏輯0為+5-+15V)。用RS232可將傳輸距離提高到15m,如果想遠(yuǎn)距離傳輸,可以采用RS422或者RS485。電平轉(zhuǎn)換芯片MAX232是美信公司(MAXIM)生產(chǎn),專用于進(jìn)行將TTL電平轉(zhuǎn)換為RS232電平的芯片,MAX232內(nèi)部有泵電源,能將+5V電源電壓在芯片內(nèi)提高到RS232電平所需的+10V或者-10V電平。圖5、兩個(gè)MAX232的接法3.整體電路設(shè)計(jì)最終設(shè)計(jì)
26、電路如下圖3所示,發(fā)送方的數(shù)據(jù)由串行口TXD段輸出,經(jīng)過電平轉(zhuǎn)換芯片MAX232將TTL電平轉(zhuǎn)換為RS232電平輸出,經(jīng)過傳輸線將信號(hào)傳送到接收端。接收方也使用MAX232芯片進(jìn)行電平轉(zhuǎn)換后,信號(hào)到達(dá)接收方串行口的接收端。接受方接收后,通過1602LCD液晶顯示接收的信息。圖6、串行通信電路3、 軟件設(shè)計(jì)本單片機(jī)課程設(shè)計(jì)實(shí)現(xiàn)的功能:?jiǎn)纹瑱C(jī)間的串口通信。首先,A主機(jī)與B主機(jī)進(jìn)入模擬英文對(duì)話(英文短語直接調(diào)用已編好的數(shù)組,無需輸入)的交流短信模式.。A主機(jī)發(fā)送數(shù)據(jù)時(shí),A主機(jī)顯示器顯示要發(fā)送的數(shù)據(jù),發(fā)送鍵按下就開始向B主機(jī)發(fā)送數(shù)據(jù),發(fā)送成功后,發(fā)送燈閃爍提示發(fā)送成功。A主機(jī)接收數(shù)據(jù)時(shí),將B主機(jī)發(fā)送來
27、的數(shù)據(jù)送到A主機(jī)顯示器顯示,接收完畢,接收燈亮起提示接收成功。B主機(jī)的發(fā)送與接收英問短語與A主機(jī)是一致的。當(dāng)A主機(jī)與B主機(jī)進(jìn)行完模擬英文對(duì)話的交流短信模式結(jié)束之后,A主機(jī)與B主機(jī)進(jìn)入到可輸入數(shù)據(jù)的數(shù)字串口通信模式,此模式增加了增加輸入功能,其他功能與模擬英文對(duì)話的交流短信模式是一樣的。 串行口工作于方式1;用定時(shí)器1產(chǎn)生9600bit/s的波特率,工作于方式2。2. 程序流程圖(1)發(fā)送端程序流程圖開始發(fā)送數(shù)字 鍵盤輸入數(shù)據(jù) 模式 ? 是 否 LCD顯示數(shù)字 LCD顯示英文 發(fā)送數(shù)據(jù) 發(fā)送數(shù)據(jù) ? 否 ? 否 是 是 接收數(shù)據(jù)接收數(shù)據(jù) ? 否? 否 是 是 LCD顯示數(shù)字 LCD顯示英文 (2
28、) 接收方程序流程圖同上四、 聯(lián)合調(diào)試在protues上進(jìn)行仿真實(shí)驗(yàn)。首先使用KeilC將編寫完成的程序編譯生成HEX文件,將HEX文件燒錄到兩片單片機(jī)中,進(jìn)行仿真實(shí)驗(yàn),結(jié)果如下圖所示,可以看到,接收端已將接受到的數(shù)據(jù)完整的顯示了出來。圖7.仿真圖五、 設(shè)計(jì)小結(jié)回顧起此課程設(shè)計(jì),至今我仍感慨頗多,從理論到實(shí)踐,在這段日子里,可以說得是苦多于甜,但是可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過的知識(shí),而且學(xué)到了很多在書本上所沒有學(xué)到過的知識(shí)。通過這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社
29、會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過程中遇到問題,可以說得是困難重重,但可喜的是最終都得到了解決。六、 附錄1. A機(jī)發(fā)送程序/*串口通信模擬短信通信*/*發(fā)送方寫完信息,點(diǎn)擊按下發(fā)送按鍵,發(fā)送數(shù)據(jù),發(fā)送成功后,發(fā)送燈閃爍三次*/*接收方接收開始信息時(shí),接收燈亮起,按下接收按鍵,接收燈熄滅,隨后開始填下將要發(fā)送的數(shù)據(jù)*/#include<reg52.h>sbit LED1=P20; /定義接收燈sbit LED2=P21; /定義發(fā)送燈sbit lcden=P27; /定義LCD使能端sbit lcdrs=P26; /定義LCD的RS端#define uc
30、har unsigned char#define uint unsigned intuchar code table="Hello,"uchar code table1="Nice to meet you."uchar code table2="Me too,"uchar code table3="Your name?."uchar code table4="My name is,"uchar code table5=" Jox."uchar code digit="
31、;0123456789-+=-*/" /定義字符數(shù)組顯示數(shù)字及正負(fù)號(hào)uint butter16=0;/定義待發(fā)送數(shù)據(jù)數(shù)組uchar agr,agr0,agr1,agr2,num,flag,flag1,flag2,flag3,a1,a2,temp;/定義全局標(biāo)志位及全局變量char num1,num2; /定義全局變量void delay(uint z) /延時(shí)子程序uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void LED2_turn()/發(fā)送燈閃爍子程序LED2=0;delay(500);LED2=1;delay(500);LE
32、D2=0;delay(500);LED2=1;delay(500);void write_com(uchar com) /液晶寫指令子程序lcdrs=0;P1=com;delay(5);lcden=1;delay(5);lcden=0;void write_data(uchar date) /液晶寫數(shù)據(jù)子程序lcdrs=1; P1=date;delay(5);lcden=1;delay(5);lcden=0;void lcdinit()/液晶初始化函數(shù)lcden=0;write_com(0x38); write_com(0x0f); write_com(0x06);write_com(0x01
33、);write_com(0x80);/設(shè)液晶初始地址為第一行第一列void send(unsigned char dat) /數(shù)據(jù)發(fā)送程序 SBUF=dat; /將要發(fā)送的數(shù)據(jù)存入發(fā)送緩沖器中while(TI=0); /若發(fā)送中斷標(biāo)志位沒有置1(正在發(fā)送數(shù)據(jù)),就等待TI=0; /若發(fā)送完成,TI自動(dòng)置1,這里把它清零 void trinit()/串口通信初始化TMOD=0x20;/設(shè)置定時(shí)器1為工作方式2TH1=0xfd;/設(shè)波特率置TL1=0xfd;TR1=1;PCON=0X00;SM0=0;SM1=1;REN=1;ES=1;void extern_interrupt()/外部中斷初始化E
34、X0=1; /開外部中斷0EX1=1; /開外部中斷1IT0=1; /下降沿觸發(fā)中斷uint keeyboard()/鍵盤掃描子程序P0=0xfe;temp=P0;temp=temp&0xf0;num1=20;while(temp!=0xf0)temp=P0;switch(temp)case 0xee:num1=7;break;case 0xde: num1=8;break;case 0xbe: num1=9;break;case 0x7e: num1=13;break;while(temp!=0xf0)/松手檢測(cè)temp=P0;temp=temp&0xf0;P0=0xfd;t
35、emp=P0;temp=temp&0xf0;while(temp!=0xf0)temp=P0;switch(temp)case 0xed:num1=4;break;case 0xdd: num1=5;break;case 0xbd: num1=6;break;case 0x7d: num1=14;break;while(temp!=0xf0)/松手檢測(cè)temp=P0;temp=temp&0xf0;P0=0xfb;temp=P0;temp=temp&0xf0;while(temp!=0xf0)temp=P0;switch(temp)case 0xeb:num1=1;bre
36、ak;case 0xdb: num1=2;break;case 0xbb: num1=3;break;case 0x7b:num1=10;break;while(temp!=0xf0)/松手檢測(cè)temp=P0;temp=temp&0xf0;P0=0xf7;temp=P0;temp=temp&0xf0;while(temp!=0xf0)temp=P0;switch(temp)case 0xe7: num1=15;break;case 0xd7: num1=0;break;case 0xb7: num1=12;break;case 0x77: num1=11;break;while
37、(temp!=0xf0)/松手檢測(cè)temp=P0;temp=temp&0xf0;return(num1);void main(void)uchar i,numn;uint m;uint *pbutter;/定義數(shù)組指針pbutter=&butter0;/將數(shù)組指針初始化為butter起止地址flag=1;flag3=0;agr=0;agr0=0;agr1=0;agr2=0;a1=1;LED1=1; /關(guān)閉接收燈LED2=1; /關(guān)閉發(fā)送燈i=0;EA=1; /開總中斷extern_interrupt();/外部中斷初始化lcdinit();/LCD初始化trinit(); /串
38、口初始化while(1)while(flag=1) /等待標(biāo)志位置1flag=0;ES=0;for(i=0;i<7;i+)write_data(tablei); /液晶寫數(shù)據(jù)delay(100);write_com(0x80+0x40); /液晶地址改變到第2行第1列for(i=0;i<18;i+)write_data(table1i); /液晶寫數(shù)據(jù)delay(100);while(agr=0); /等待發(fā)送信號(hào)for(i=0;i<7;i+)send(tablei);/發(fā)送數(shù)據(jù)delay(100);for(i=0;i<18;i+)send(table1i); /發(fā)送數(shù)
39、據(jù)delay(100);LED2_turn();delay(500);write_com(0x01);/清屏 ES=1;/開外部中斷,等待接收數(shù)據(jù)write_com(0x01);/再次清屏,防止光標(biāo)不在第一行第一位,否則可能出現(xiàn)在第二位一位while(flag1=1)while(agr0=0);flag1=0;ES=0;delay(1000);write_com(0x01);for(i=0;i<8;i+)write_data(table2i);delay(100);write_com(0x80+0x40);for(i=0;i<12;i+)write_data(table3i);de
40、lay(100);agr=0;while(agr=0);for(i=0;i<8;i+)send(table2i);delay(100);for(i=0;i<12;i+)send(table3i);delay(100);LED2_turn();delay(500);write_com(0x01); ES=1;write_com(0x01);/再次清屏,防止光標(biāo)不在第一行第一位,否則可能出現(xiàn)在第二位 while(flag2=1)agr0=0;while(agr0=0);flag2=0;ES=0;delay(1000);write_com(0x01);for(i=0;i<12;i+
41、)write_data(table4i);delay(100);write_com(0x80+0x40);for(i=0;i<7;i+)write_data(table5i);delay(100);agr=0;while(agr=0);for(i=0;i<12;i+)send(table4i);delay(100);for(i=0;i<7;i+)send(table5i);delay(100);LED2_turn();delay(500);write_com(0x01); ES=1;write_com(0x01);/再次清屏,防止光標(biāo)不在第一行第一位,否則可能出現(xiàn)在第二位fl
42、ag3=1;delay(10);write_com(0x01); while(flag3=1)/進(jìn)入自由發(fā)送與接收數(shù)據(jù)的模式LED1=1;m=keeyboard();/掃描鍵盤數(shù)據(jù)if(num1!=20)/判斷鍵盤是否有數(shù)據(jù)輸入,有的話執(zhí)行IF語氣LED1=1;*pbutter=m;/將鍵盤數(shù)據(jù)存在butter數(shù)組中pbutter+;delay(5);write_data(digitbutternumn);numn+;if(agr1=1) /判斷是否發(fā)送數(shù)據(jù)LED1=1;agr1=0;for(i=0;i<numn;i+)send(butteri);delay(100);numn=0;pb
43、utter=&butter0;write_com(0x01);delay(10);LED2_turn();ES=1;if(agr2=1)agr2=0;write_com(0x01);delay(10);write_com(0x80); void exter0() interrupt 0/外部中斷0子程序 LED1=1;agr0=1;agr2=1;void exter1() interrupt 2 /外部中斷1子程序agr=1;agr1=1;ES=0;void ser() interrupt 4 /串口中斷子程序RI=0;LED1=0;LED2=1;num=SBUF;if(num=
44、9;,')write_data(num);write_com(0x80+0x3e);if(flag3=1)write_data(digitnum);elsewrite_data(num);if(num='.')if(a1=1)a1-; flag1=1; else if(a2=0)a2-;flag2=1; 2. B機(jī)接收程序/*串口通信模擬短信通信*/*發(fā)送方寫完信息,點(diǎn)擊按下發(fā)送按鍵,發(fā)送數(shù)據(jù),發(fā)送成功后,發(fā)送燈閃爍三次*/*接收方接收開始信息時(shí),接收燈亮起,按下接收按鍵,接收燈熄滅,隨后開始填下將要發(fā)送的數(shù)據(jù)*/#include<reg52.h>sbit
45、LED1=P20;sbit LED2=P21;#define uchar unsigned char#define uint unsigned intuchar code table="Hi,"uchar code table1="I am happy."uchar code table2="Danny,"uchar code table3="And you?."uchar code digit="0123456789-+=-*/" uint butter16=0;sbit lcden=P27;
46、sbit lcdrs=P26;uchar agr,agr0,agr1,agr2,num,flag,flag1,flag2,a1,a2,temp;char num1,num2,numm;void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);void LED2_turn()LED2=0;delay(500);LED2=1;delay(500);LED2=0;delay(500);LED2=1;delay(500);void write_com(uchar com)lcdrs=0;P1=com;delay(5);lcden
47、=1;delay(5);lcden=0;void write_data(uchar date)lcdrs=1;P1=date;delay(5);lcden=1;delay(5);lcden=0;void lcdinit()lcden=0;write_com(0x38);write_com(0x0f);write_com(0x06);write_com(0x01);write_com(0x80);void send(unsigned char dat) /數(shù)據(jù)發(fā)送程序 SBUF=dat; /將要發(fā)送的數(shù)據(jù)存入發(fā)送緩沖器中while(TI=0); /若發(fā)送中斷標(biāo)志位沒有置1(正在發(fā)送數(shù)據(jù)),就等待
48、TI=0; /若發(fā)送完成,TI自動(dòng)置1,這里把它清零 void trinit()TMOD=0x20;/設(shè)置定時(shí)器1為工作方式2TH1=0xfd;TL1=0xfd;TR1=1;PCON=0X00;SM0=0;SM1=1;REN=1;ES=1;void extern_interrupt()EX0=1; /開外部中斷0EX1=1; /開外部中斷1IT0=1; /下降沿觸發(fā)中斷uint keeyboard()/鍵盤掃描子程序P0=0xfe;temp=P0;temp=temp&0xf0;num1=20;while(temp!=0xf0)temp=P0;switch(temp)case 0xee:
49、num1=7;break;case 0xde: num1=8;break;case 0xbe: num1=9;break;case 0x7e: num1=13;break;while(temp!=0xf0)/松手檢測(cè)temp=P0;temp=temp&0xf0;P0=0xfd;temp=P0;temp=temp&0xf0;while(temp!=0xf0)temp=P0;switch(temp)case 0xed:num1=4;break;case 0xdd: num1=5;break;case 0xbd: num1=6;break;case 0x7d: num1=14;bre
50、ak;while(temp!=0xf0)/松手檢測(cè)temp=P0;temp=temp&0xf0;P0=0xfb;temp=P0;temp=temp&0xf0;while(temp!=0xf0)temp=P0;switch(temp)case 0xeb:num1=1;break;case 0xdb: num1=2;break;case 0xbb: num1=3;break;case 0x7b:num1=10;break;while(temp!=0xf0)/松手檢測(cè)temp=P0;temp=temp&0xf0;P0=0xf7;temp=P0;temp=temp&0xf0;while(temp!=0xf0)temp=P0;switch(temp)case 0xe7: num1=15;break;case 0xd7: num1=0;break;case 0xb7: num1=12;break
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 試用期提前轉(zhuǎn)正了合同5篇
- 項(xiàng)目資金預(yù)算表-項(xiàng)目資金籌措與預(yù)算
- 建筑工程合同種類
- 2025年淮南資格證模擬考試
- 2025年江西貨運(yùn)從業(yè)資格證考試題答案解析大全
- 云服務(wù)器托管服務(wù)及支持合同
- 個(gè)人酒店承包經(jīng)營(yíng)合同8篇
- 上海員工的勞動(dòng)合同范本5篇
- 課題申報(bào)書參考文獻(xiàn)格式
- 中國(guó)電建合同范本
- 農(nóng)村建房清包工合同協(xié)議書
- 鎳礦石購(gòu)銷合同
- (新版)電工三級(jí)-職業(yè)技能等級(jí)認(rèn)定考試題庫(kù)(學(xué)生用)
- 《高性能樹脂》課件
- 中央2024年中央宣傳部直屬單位招聘106人筆試歷年典型考題及考點(diǎn)附答案解析
- 《教育向美而生-》讀書分享課件
- 拒絕校園欺凌從我做起完整版課件
- 幼兒園《認(rèn)識(shí)醫(yī)生和護(hù)士》課件
- 技術(shù)進(jìn)口合同登記證
- DZ∕T 0372-2021 固體礦產(chǎn)選冶試驗(yàn)樣品配制規(guī)范(正式版)
- 細(xì)菌的分離培養(yǎng)與培養(yǎng)特性觀察課件講解
評(píng)論
0/150
提交評(píng)論