版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、5.4 人機接口電路設(shè)計及編程5.4 人機接口電路設(shè)計及編程5.4.1 鍵盤電路設(shè)計及編程5.4.1 鍵盤電路設(shè)計及編程1. 電路 鍵盤接口電路如圖5-12所示,板上擴展了一個44行列式矩陣鍵盤接口。 該鍵盤采用中斷掃描方式進(jìn)行工作,行線選用PORTG47輸出,列線選用PORTF58為輸入。 行線接上拉電阻保持高電平,并通過“與”門將輸出信號與MCU的中斷EXINT0連接; 列線接上拉電阻保持高電平。1. 電路 鍵盤接口電路如圖5-12所示,板人機接口電路設(shè)計方案及編程學(xué)課件2. 編程 (1) I/O口和中斷初始化 I/O引腳設(shè)置:rPDATE=0X60;rPCONF=0 x2A; 列線POR
2、TF58為輸入rPUPF=0 x0; 列線接上拉電阻rPDATG=0 x0; rPCONG=0 x55FF; 行線PORTG47輸出, PORTG0作為EXINT0連接rPUPG=0 x0; 行線接上拉電阻2. 編程 (1) I/O口和中斷初始化 中斷初始化 rINTCON=0 x5; / 非向量模式,IRQ 允許,FIQ 禁止 rINTMOD=0 x0; / 全部IRQ 模式 rINTMSK =(BIT_GLOBAL|BIT_EINT0); /EXINT0允許, 所有中斷屏蔽位允許 pISR_EINT0=(unsigned)keyboard_ISR; /指定中斷服務(wù)程序 中斷初始化 (2)
3、程序 將行線PORTG47輸出為低電平,當(dāng)有鍵盤按下時,該行線被拉為低電平,使得EXINT0輸入也為低電平,MCU產(chǎn)生中斷。 中斷產(chǎn)生后通過對鍵盤的行和列進(jìn)行掃描的方法,可以計算出是哪個鍵按下,并跳到相應(yīng)的鍵盤處理程序中去。 (2) 程序void keyboard_ISR(void) char x,y,xrecord,yrecord,temp; rI_ISPC=BIT_EINT0; /clear pending_bit Delay(400); /delay 40ms if(rPDATF&0 x1E0)=0 x1E0) return 0; /no keyboard press,return vo
4、id keyboard_ISR(void) else x=1; y=1; xrecord=(rPDATF&0 x1E0)1); xrecord=xrecord4; while(xrecord!=0 x1)/judge row x=x+1; xrecord=xrecord1; else if(xrecord=0) rPDATG=0X0F;/ no ,return return 0; Delay(200); /delay 20ms rPDATG=0XEF; /input high if(xrecord=0)while(rPDATF&0 x1E0)=0 x1E0) rPDATG=rPDATG4)&0
5、 x0F; while(yrecord!=0 x1) / judge line y=y+1; yrecord=yrecord1; if(yrecord=0) rPDATG=0X0F; /no board press,return return 0; Delay(200); /deLed_Display(x+(y-1)*4-1); Uart_Printf(%3d,x+(y-1)*4-1); Delay(1200);/delay 40ms rPDATG=0X0F; Led_Display(x+(y-1)*4-1);5.4.2 LCD接口電路設(shè)計及編程5.4.2 LCD接口電路設(shè)計及編程1. LCD
6、接口信號 EV44B0 II現(xiàn)配有160240的單色顯示屏,4比特單掃描。EV44B0 II將LCD控制信號線連接到JP6上,與LCD模塊相連,其原理如圖5-13所示。 在LCD模塊上,集成了LCD驅(qū)動器和專門的電壓轉(zhuǎn)換電路,用以驅(qū)動LCD屏幕和適配LCD工作電壓。LCD連接器的信號定義如表5-4所示。1. LCD接口信號 EV44B0 II現(xiàn)人機接口電路設(shè)計方案及編程學(xué)課件1. LCD接口信號 EV44B0 II現(xiàn)配有160240的單色顯示屏,4比特單掃描。EV44B0 II將LCD控制信號線連接到JP6上,與LCD模塊相連,其原理如圖5-13所示。 在LCD模塊上,集成了LCD驅(qū)動器和專門
7、的電壓轉(zhuǎn)換電路,用以驅(qū)動LCD屏幕和適配LCD工作電壓。LCD連接器的信號定義如表5-4所示。1. LCD接口信號 EV44B0 II現(xiàn)Pin SignalPin SignalPin SignalPin Signal1 VM6 VDD11 VD216 VD72 VRAME7 GND12 VD317 TSPX3 VLINE8 VD413 GND18 TSMX4 VCLK E9 VD014 VD519 TSPY5 GPB1010 VD115 VD620 TSMYPin SignalPin Sig2. 編程 顯示緩沖區(qū)與LCD象素對應(yīng)關(guān)系圖如圖5-14所示。2. 編程 顯示緩沖區(qū)與LCD象素對應(yīng)關(guān)系
8、圖人機接口電路設(shè)計方案及編程學(xué)課件 (1) LCD 初始化程序 通常采用S3C44B0X的PORTC口和PPORTD口作為LCD驅(qū)動接口,因此需要設(shè)置它們工作在第3功能狀態(tài),設(shè)置I/O口控制寄存器的語句如下: rPDATC=0 x8400; rPCONC=0 x5F5FFFFF; rPUPC=0 x33ff;/should be enabled rPCOND=0 xaaaa; rPUPD=0 xff; (1) LCD 初始化程序 LCD初始化程序如下:void Lcd_MonoInit(void)/160 x240 1bit/1pixel LCD#define MVAL_USED 0rLCDC
9、ON1=(0)|(15)|(MVAL_USED7) |(0 x38)|(0 x310)|(CLKVAL_MONO12);/disable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk,rLCDCON2=(LINEVAL)|(HOZVAL10)|(1021); /LINEBLANK=10 LCD初始化程序如下:rLCDSADDR1=(0 x022) 1); / monochrome, LCDBANK, LCDBASEUrLCDSADDR2=M5D(U32)frameBuffer1+(SCR_X SIZE*LCD_YSIZE/8)1)|(MVAL21)|(129);rLCDSAD
10、DR3= (LCD_XSIZE/16)|(SCR_X SIZE-LCD_XSIZE)/16)9);rLCDCON1=(1)|(15)|(MVAL_USED7)|(0 x38)| (0 x310)|(CLKVAL_MONO12);/enable,4B_SNGL_SCAN,WDLY=8clk,WLH=8clk, rLCDSADDR1=(0 x027)|(U32)f(2) LCD 顯示程序 LCD 顯示程序如下:#define frameBuffer1 0 xc400000extern unsigned char *Buf;void displaylcd(void) unsigned int *pb
11、uffer,temp_data; int i; pbuffer =(U32*) frameBuffer1;(2) LCD 顯示程序 LCD 顯示程序如下: for(i = 0; i (4800/4) ;i+) temp_data = (Bufi*4+3 24) + (Bufi*4+2 16) + (Bufi*4+1 8) +(Bufi*4); pbufferi = temp_data; Delay(10); for(i = 0; i (4800/4) ;i(3) LCD 清屏程序 LCD 清屏程序如下:void clrscreen(void)int i,j;unsigned int *pbuf
12、fer;pbuffer =(U32*) frameBuffer1;for (i=0;i4800/4;i+) pbufferi =0;/(0 x0FFFFFFFF); (3) LCD 清屏程序 LCD 清屏程序如下:5.4.3 觸摸屏電路設(shè)計及編程1. 觸摸屏的工作原理 觸摸屏按其工作原理的不同分為表面聲波屏、電容屏、電阻屏和紅外屏幾種。 常見的又?jǐn)?shù)電阻觸摸屏。如圖5-15 所示,電阻觸摸屏的屏體部分是一塊與顯示器表面非常配合的多層復(fù)合薄膜,由一層玻璃或有機玻璃作為基層,表面涂有一層透明的導(dǎo)電層,上面再蓋有一層外表面硬化處理、光滑防刮的塑料層,它的內(nèi)表面也涂有一層透明導(dǎo)電層,在兩層導(dǎo)電層之間有許
13、多細(xì)小(小于千分之一英寸)的透明隔離點把它們隔開絕緣。 5.4.3 觸摸屏電路設(shè)計及編程1. 觸摸屏的工作原理人機接口電路設(shè)計方案及編程學(xué)課件 如圖5-16所示,當(dāng)手指或筆觸摸屏幕時(圖c),平常相互絕緣的兩層導(dǎo)電層就在觸摸點位置有了一個接觸,因其中一面導(dǎo)電層(頂層)接通X 軸方向的5V 均勻電壓場(圖a),使得檢測層(底層)的電壓由零變?yōu)榉橇?,控制器偵測到這個接通后,進(jìn)行A/D 轉(zhuǎn)換,并將得到的電壓值與5V 相比即可得觸摸點的X 軸坐標(biāo)為(原點在靠近接地點的那端): Xi=LxVi/V(即分壓原理)同理得出Y 軸的坐標(biāo),這就是所有電阻觸摸屏共同的最基本原理。 如圖5-16所示,當(dāng)手指或筆觸摸
14、屏幕時(圖人機接口電路設(shè)計方案及編程學(xué)課件2.觸摸屏電路控制 觸摸屏的控制采用專用芯片,專門處理是否有筆或手指按下觸摸屏,并在按下時分別給兩組電極通電,然后將其對應(yīng)位置的摸擬電壓信號經(jīng)過A/D 轉(zhuǎn)換送回處理器 .2.觸摸屏電路控制 觸摸屏的控制采用專用芯 我們選取 GPG 口與 ADS7843 接口。共運用了 PG2PG7 口共 6 條口線。你也可以選擇其它的 I/O 口,但注意不要與 I/O 口上已經(jīng)設(shè)定的功能(例如串口)相沖突。參考電路圖如下:按照下圖用導(dǎo)線將兩個模塊連接起來。如圖5-17所示。 我們選取 GPG 口與 ADS7843 接人機接口電路設(shè)計方案及編程學(xué)課件3. 編程(1) P
15、CONG 寄存器配置 按照以上電路來設(shè)置,PG6和PG5輸入,PG4PG2輸出,PG7作為中斷EINT7且加內(nèi)部上拉電阻,初始化語句如下: rPCONG=0 x015f; rPUPG &=0 x80; 3. 編程(1) PCONG 寄存器配置(2) ADS7843 編程 ADS7843的控制字如表5-5所示,其中S為數(shù)據(jù)傳輸起始標(biāo)志位,該位必為。 A2A0進(jìn)行通道選擇。 MODE用來選擇A/D轉(zhuǎn)換的精度,1-選擇位,-選擇12位。 SER/DFR選擇參考電壓的輸入模式。 (2) ADS7843 編程人機接口電路設(shè)計方案及編程學(xué)課件 PD1和PD0選擇省電模式:00-為省電模式允許,在兩次A/D
16、轉(zhuǎn)換之間掉電,且中斷允許;01同00,只是不允許中斷;10保留;11禁止省電模式。 A0A2 用來進(jìn)行開關(guān)切換,如表5-6所示。 PD1和PD0選擇省電模式:00-為省SER/DFR1 時,A0A2 輸入設(shè)置 SER/DFR1 時,A0A2 輸入設(shè)置 我們采用固定參考電壓模式,因此 SER/DFR1。 程序中首先探測 PENIRQ 是否為低電平,如果為高則認(rèn)為觸摸屏沒有接觸;如果探測到 PENIRQ 為低電平,則認(rèn)為有接觸。 利用軟件模擬 DIN、DOUT、DCLK上的 3 線串行傳輸?shù)臅r序,將讀取 X 坐標(biāo)數(shù)值或 Y 坐標(biāo)數(shù)值的控制字串行送入 ADS7843,并串行讀出坐標(biāo)值。 我們采用固定
17、參考電壓模式,因此 SER/ 檢測 PENIRQ #define TOUCH_MSR_Y 0 x9c; /讀 Y 軸坐標(biāo)命令#define TOUCH_MSR_X 0 xdc; /讀 X 軸坐標(biāo)命令if(rPDATG&0 x80)=0) /PENIRQ 電平為低/TouchState.pressed=1;_State.Pressed=1; /說明已經(jīng)按下temp=TOUCH_MSR_X;_State.x=ReadTouch(temp);temp=TOUCH_MSR_Y;_State.y=ReadTouch(temp); 檢測 PENIRQ #define TOUCH_MS 送控制字并讀取結(jié)果子
18、程序int ReadTouch(unsigned char command)unsigned char temp,i,ack,j,k;ack=0;/PG7-PENIRQ,PG6-BUSY,PG5CS,PG3-DCLK,PG2-DINrPDATG&=0 xe7;/cs 置低;dclk 置低temp=0 x80; 送控制字并讀取結(jié)果子程序int ReadTouch(ufor(i=0;i1;/移位for(i=0;i8;i+)/發(fā)送 1 個字節(jié) while(temp=(rPDATG&0 x40)=0); 等待 BUSY 變低 rPDATG&=0 xdf;/din 清零 /再 1 個時鐘以后開始接收數(shù)據(jù)
19、 rPDATG|=0 x08;/置高 dclk delay(2); rPDATG&=0 xf7;/清零 dclk delay(2); while(temp=(rPDATG&0 x40)=for(i=0;i7;i+)取得前 7 位坐標(biāo)數(shù)據(jù)(高位在前)rPDATG|=0 x08;/置高 dclkif(temp=rPDATG&0 x20)/取得 din 上的 1 位數(shù)據(jù)ack+=1;ack=ack1;delay(2);rPDATG&=0 xf7;/清零 dclkdelay(2);rPDATG|=0 x08;/置高 dclkfor(i=0;i7;i+)取得前 7 位坐標(biāo)數(shù)據(jù)(高if(temp=rPDA
20、TG&0 x20)/接收最后 1 位ack+=1;delay(2);rPDATG&=0 xf7;/清零 dclkrPDATG|=0 x10;/置高 csreturn ack;/返回接收結(jié)果if(temp=rPDATG&0 x20)/接收最后 4.觸摸屏與顯示器的配合 ADS7843 送回控制器的X 與Y 值僅是對當(dāng)前觸摸點的電壓值的A/D 轉(zhuǎn)換值,它不具有實用價值。 這個值的大小不但與觸摸屏的分辨率有關(guān),而且也與觸摸屏與LCD 貼合的情況有關(guān)。而且,LCD 分辨率與觸摸屏的分辨率一般來說是不一樣,坐標(biāo)也不一樣。 因此,如果想得到體現(xiàn)LCD 坐標(biāo)的觸摸屏位置,還需要在程序中進(jìn)行轉(zhuǎn)換。 4.觸摸屏
21、與顯示器的配合 ADS7843 假設(shè)LCD 分辨率是320240,坐標(biāo)原點在左上角;觸摸屏分辨率是900900,坐標(biāo)原點在左上角,則轉(zhuǎn)換公式如下: xLCD=320*(x-x2)/(x1-x2); yLCD=240*(y-y2)/(y1-y2); 假設(shè)LCD 分辨率是320240,坐標(biāo) 如果坐標(biāo)原點不一致,比如LCD 坐標(biāo)原點在右下角,而觸摸屏原點在左上角,則還可以進(jìn)行如下轉(zhuǎn)換: xLCD=320-320*(x-x2)/(x1-x2); yLCD=240-240*(y-y2)/(y1-y2); 最后得到的值,便可以盡可能得使LCD 坐標(biāo)與觸摸屏坐標(biāo)一致,這樣,更具有實際意義。 如果坐標(biāo)原點不一
22、致,比如LCD 坐標(biāo)原點在右下角,而5.4.4 8段數(shù)碼管電路設(shè)計及編程1.電路設(shè)計 系統(tǒng)使用了一個8段數(shù)碼LED,如圖2-18所示。該數(shù)碼管是共陽極的,低電平信號使LED點亮。 CPU數(shù)據(jù)總線DATA(07)經(jīng)74LS573驅(qū)動器對數(shù)碼管進(jìn)行驅(qū)動。其片選信號由CPU的nGCS3信號選通,而8段的內(nèi)容則由CPU低8位數(shù)據(jù)線決定。 口地址為0 x6000000。 5.4.4 8段數(shù)碼管電路設(shè)計及編程1.電路設(shè)計人機接口電路設(shè)計方案及編程學(xué)課件2. 編程8段數(shù)碼管顯示程序如下:void Led_Display(unsigned char data) unsigned char * ledbuffe
23、r = (unsigned char *) 0 x6000000 switch(data) case 0: *ledbuffer=0 x12; break; . case 0 xf: *ledbuffer=0 x68; break; 2. 編程8段數(shù)碼管顯示程序如下:5.5 串行接口電路設(shè)計及編程5.5 串行接口電路設(shè)計及編程5.5.1 串行電路接口 串行接口電路如圖5-19所示。系統(tǒng)提供兩個RS232標(biāo)準(zhǔn)串行接口(DB9),UART0/l可與PC或MODOM進(jìn)行串行通信。 PORTC1015分別作為nRTS1、nCTS1、TXD1、RXD1、nRTS0和nCTS0信號,PE1和PE2作為TX
24、D0和RXD0信號。 兩個接口則采用兩片MAX2322C作為電平轉(zhuǎn)換器。5.5.1 串行電路接口 串行接口電路如人機接口電路設(shè)計方案及編程學(xué)課件 5.5.2 編程1. I/O接口配置初始化 對PORTC和PORTE初始化語句如下: rPCONC = 0 x0f000000|rPCONC; rPUPC = 0 x3000;/設(shè)置內(nèi)部上拉 rPCONE = (rPCONE&0 xfc3)|0 xeb; rPUPE = 0 x6;2. UART初始化 對 UART 口進(jìn)行初始化設(shè)置程序如下: 5.5.2 編程1. I/O接口配置初始化static int UartNum=0;void myUart_
25、Init(int whichuart, int baud) /設(shè)置串口波特率等初始化工作。if(whichuart=0) UartNum=0; rUFCON0=0 x0; /不使用 FIFO rUMCON0=0 x0; /不使用自動流控制 rULCON0=0 x3; /不采用紅外線傳輸模式,無奇偶校驗 位,1 個停止位, /8個數(shù)據(jù)位static int UartNum=0; rUCON0=0 x245; /發(fā)送中斷為電平方式,接收中斷為 邊沿方式,禁止超時 /中斷,允許產(chǎn)生錯誤狀態(tài)中斷,禁止回 送模式,禁止中 /止信號,傳輸模式為中斷請求模式,接 收模式也為中斷 /請求模式。 rUBRDIV
26、0=(int)(MCLK/16./baud + 0.5)-1); /根據(jù)波特率計算 UBRDIV0 的值 rUCON0=0 x245; else if(whichuart=1)UartNum=1;rUFCON1=0 x0;rUMCON1=0 x0;rULCON1=0 x3;rUCON1=0 x245;rUBRDIV1 = ( (int)(MCLK/16./baud + 0.5) -1 );else if(whichuart=1)3.字符發(fā)送程序#define WrUTXH0(ch)(*(volatile unsigned char*)0 xld00020)=(unsigned char)(ch
27、)#define WrUTXH0(ch)(*(volatile unsigned char*)0 xld04020)=(unsigned char)(ch)Void myUart_SendByte(char ch) if(UartNum=0) if(ch=“n”) while(!(rUTRSTAT0&0 x2); /等待,直到發(fā)送緩沖區(qū)為空 Delay(10); /超級中斷的響應(yīng)速度較慢 WrUTXH0(“r”); /發(fā)送回車符 while(!(rUTRSTAT0&0 x2); /等待,知道發(fā)送緩沖區(qū)為空 Delay(10); WrUTXH0(ch); /發(fā)送字符 3.字符發(fā)送程序 else
28、if(ch=“n”) while(!(rUTRSTAT1&0 x2); Delay(10); /因為超級終端響應(yīng)較慢 rUTXH1=“r”; While(!(rUTRSTAT1&0 x2); /等待THR空。 Delay(10); WrUTXH1(ch); else字符接受程序#define RdURXH0()(*(volatile unsigned char*)(0 xld00027)#define RdURXH1()(*(volatile unsigned char*)(0 xld04027)Char Uart_Getch(void) if(whichUart=0) /串口0 while(
29、!(rUTRSTAT0&0 x1); /讀出接收到的數(shù)據(jù)(一直到讀完) return RdURXH0(); /URXH0:UART0接收緩沖寄存器 else /串口1 while(!(rUTRSTAT1&0 x1); /Receive data ready return rURXH1; 字符接受程序5.6 C接口電路設(shè)計及編程5.6 C接口電路設(shè)計及編程5.6.1 EEPROM芯片介紹5.6.1 EEPROM芯片介紹 目前,通用存儲器芯片多為EEPTOM,其常用的協(xié)議主要有兩線串行連接協(xié)議(C)和三線串行連接協(xié)議。 帶C總線接口的EEPROM有許多型號,其中AT24Cxx系列使用十分普遍,產(chǎn)品
30、包括AT2401/02/04/08/16等,其容量(字節(jié)數(shù)頁)分別為1288/2568/5128/10248/20488,適用于25V的低電壓操作,具有低功耗和高可靠性等優(yōu)點。 目前,通用存儲器芯片多為EEPTOM,其常用的協(xié)議主 AT24系列存儲器芯片采用CMOS工藝制造,內(nèi)置有高壓泵,可在單電壓供電條件下工作。其標(biāo)準(zhǔn)封裝為8引腳DIP封裝形式,如圖5-20所示。 AT24系列存儲器芯片采用CMOS工藝人機接口電路設(shè)計方案及編程學(xué)課件 1. SCL 串行時鐘。遵循ISO/IEC7816同步協(xié)議;漏極開路,需接上拉電阻;在該引腳的上升沿,系統(tǒng)將數(shù)據(jù)輸入到每個EEPROM器件,在下降沿輸出。 2
31、. SDA 雙向串行數(shù)據(jù)線,漏極開路,需接上拉電阻,可與其它開路器件“線或”。 1. SCL3. A0、A1、A2 器件/頁面尋址地址輸入端。在AT24C01/02中,引腳被硬連接。其他AT24Cxx均可接尋址地址線。4. WP 讀/寫保護。接低電平時可對整片空間進(jìn)行讀/寫;接高電平時不能對受保護區(qū)進(jìn)行讀/寫。5. VCC/GND +5V的工作電壓。3. A0、A1、A25.6.2 EEPROM讀寫操作1. AT24C04結(jié)構(gòu)與應(yīng)用簡述 AT24C04由輸入緩沖器和EEPROM陣列組成。 由于EEPROM的半導(dǎo)體工藝特性寫入時間為510 ms,如果從外部直接寫入EEPROM,則每寫一個字節(jié)都要
32、等候510ms,成批數(shù)據(jù)寫入時就要等候更長時間。具有SRAM輸入緩沖器的EEPROM器件,其寫入操作變成對SRAM緩沖器的裝載。裝載完后啟動一個自動寫入邏輯將緩沖器中的全部數(shù)據(jù)一次寫入EEPROM陣5.6.2 EEPROM讀寫操作1. AT24C04 對緩沖器的輸人稱為頁寫,緩沖器的容量 稱為頁寫字節(jié)數(shù)。AT24C04的頁寫字節(jié)數(shù)為8,占用最低3位地址。當(dāng)寫入不超過頁寫字節(jié)數(shù)時,對EEPROM器件的寫入操作與對SRAM的寫入操作相同;當(dāng)超過頁寫字節(jié)數(shù)時,應(yīng)等候510 ms后再啟動一次寫操作。 由于EEPROM器件緩沖區(qū)容量較小(只占據(jù)最低3位),且不具備溢出進(jìn)位檢測功能,所以,從非零地址寫入8
33、個字節(jié)數(shù)或從零地址寫入超過8個字節(jié)數(shù)會形成地址翻卷,導(dǎo)致寫入出錯。 對緩沖器的輸人稱為頁寫,緩沖器的容量 2. 設(shè)備地址(DADDR) AT24C04xx的器件地址是1010。2. 設(shè)備地址(DADDR)3. AT24Cxx的數(shù)據(jù)操作格式 在IIC總線中,對AT24C04內(nèi)部存儲單元讀寫,除了要給出器件的設(shè)備地址(DADDR)外,還須指定讀寫的頁面地址(PADDR)。兩者組成操作地址(OPADDR)如下: 1010 A2 A1 R/W (“”為無效) 系統(tǒng)中引腳A2A1A0為000,因此,系統(tǒng)可尋址AT24C04全部頁面,共4K位。按照AT24C04器件手冊讀寫地址(ADDR1010 A2 A
34、1R/W)中的數(shù)據(jù)操作格式如下:3. AT24Cxx的數(shù)據(jù)操作格式(1) 寫入操作格式 任意寫一個字節(jié)到地址ADDR_W,其時序圖如圖5-21所示,寫入操作格式為: START_C OPADDR_W ACK ADDR_W ACK data ACK STOP_C(1) 寫入操作格式人機接口電路設(shè)計方案及編程學(xué)課件 從地址ADDR_W起連續(xù)寫人n個字節(jié)(同一頁面),其時序圖如圖5-22所示,寫人格式為: START_C OPADDR_W ACK ADDR_W ACK data1 ACK data2 ACK.datan ACK STOP_C 從地址ADDR_W起連續(xù)寫人n個字節(jié)(同人機接口電路設(shè)計方
35、案及編程學(xué)課件(2) 讀出操作格式 從任意地址ADDR_R讀一個字節(jié)的時序圖如圖5-23所示,讀出操作格式為: START_C OPADDR_W ACK ADDR_R ACK OPADDR_R ACK data STOP_C(2) 讀出操作格式人機接口電路設(shè)計方案及編程學(xué)課件 從地址ADDR_R起連續(xù)讀出n個字節(jié)(同一頁面),其時序圖如圖5-24所示,讀出操作格式為: START_C OPADDR_R ACK data1 ACK data2 ACK . datan ACK STOP_C 從地址ADDR_R起連續(xù)讀出n個字節(jié)(同人機接口電路設(shè)計方案及編程學(xué)課件 在讀任意地址操作中,除了發(fā)送讀地址
36、外,還要發(fā)送頁面地址(PADDR); 因此,在連續(xù)讀出72個字節(jié)操作前,要進(jìn)行1個字節(jié)PADDR寫入操作,然后重新啟動讀操作。 注意,讀操作完成后沒有ACK。 在讀任意地址操作中,除了發(fā)送讀地址外,還5.6.3 編程1. I/O 端口 IIC 功能設(shè)置 我們采用PF0口和PF1口工作在第2功能模式下,分別作為 IIC總線的SCL和SDA與24LC04B相連。 因此,需要設(shè)置PF0和PF1工作在第2功能模式下。采用以下語句: rPCONF |= 0 xa; /PF0:IICSCL, PF1:IICSDA rPUPF |= 0 x3; /pull-up disable5.6.3 編程1. I/O
37、端口 IIC 功能設(shè)置2. IIC中斷使能 由于是采用中斷的方式了解每個字節(jié)的傳輸是否成功。 因此需要定義中斷處理程序入口,并且使能中斷。采用以下語句實現(xiàn): pISR_IIC= (unsigned)IIC_Int; /將 IIC 中斷處理程序指針指向 IIC_Int rINTMSK= (BIT_GLOBAL|BIT_IIC); /使能中斷2. IIC中斷使能3. 初始化 IIC 接口 對 IICCON 進(jìn)行設(shè)置: rIICCON = (17) | (06 ) | (15) | (0 xf ); /使能 ACK的產(chǎn)生, IICCLK=MCLK/16, 使能發(fā)送/接收中斷,清除 pending 位
38、以便響應(yīng) /中斷,Tx clock(64MHz/16)/(15+1) = 250KHz3. 初始化 IIC 接口4. 向24LC04B中寫入數(shù)據(jù)子程序 #define IICBUFSIZE 0 x20 U8 _iicDataIICBUFSIZE; /寫數(shù)據(jù)緩存 volatile int _iicDataCount; /數(shù)據(jù)長度 volatile int _iicStatus; volatile int _iicMode; int _iicPt;4. 向24LC04B中寫入數(shù)據(jù)子程序 void Wr24LCxx(U32 slvAddr,U32 addr,U8 data) _iicMode=WRD
39、ATA; /寫數(shù)據(jù)模式 _iicPt=0; _iicData0=(U8)addr; /字節(jié)寫入模式,數(shù)據(jù)格式 參考教材內(nèi)容 _iicData1=data; _iicDataCount=2; rIICDS=0 xa0; /控制字節(jié) rIICSTAT=0 xf0; /主設(shè)備發(fā)送模式,產(chǎn)生起 始條件,使能發(fā)送/接收 while(_iicDataCount != -1); _iicMode=POLLACK; void Wr24LCxx(U32 slvAddr,U32 while(1) rIICDS=slvAddr; _iicStatus=0 x100; rIICSTAT=0 xf0; /MasTx,S
40、tart rIICCON=0 xaf; /resumes IIC operation. while(_iicStatus=0 x100); if(!(_iicStatus&0 x1) break; / 成功接收到 ACK rIICSTAT=0 xd0; /產(chǎn)生停止條件 rIICCON=0 xaf;/釋放 IIC 操作 Delay(1); /等待,直到停止條件起作用,寫入成功 while(1)5. 從24LC04B讀出數(shù)據(jù)子程序void Rd24LCxx(U32 slvAddr,U32 addr,U8 *data)_iicMode=SETRDADDR;_iicPt=0;_iicData0=(U8
41、)addr;_iicDataCount=1;rIICDS=slvAddr;rIICSTAT=0 xf0;/MasTx,Start5. 從24LC04B讀出數(shù)據(jù)子程序while(_iicDataCount != -1);_iicMode=RDDATA;_iicPt=0;_iicDataCount=1;rIICDS=slvAddr;rIICSTAT=0 xb0; /MasRx,StartrIICCON=0 xaf; /resumes IIC operation.while(_iicDataCount != -1);*data=_iicData1;while(_iicDataCount != -1)
42、;6. IIC中斷處理子程序void _irq IIC_Int (void)U32 iicSt, i ;rI_ISPC=BIT_IIC; /清除 pending 位iicSt=rIICSTAT; /讀入 IIC 總線單前狀態(tài),以 便進(jìn)行各種錯誤處理if(iicSt&0 x8) / when bus arbitration is failed.if(iicSt&0 x4) / when a slave address is matched with IICADDif(iicSt&0 x2) / when a slave address is 0000000bif(iicSt&0 x1) / wh
43、en ACK isnt received6. IIC中斷處理子程序switch(_iicMode) /根據(jù)當(dāng)前操作模式進(jìn)行相應(yīng)處理case POLLACK: /等待 ACK 模式_iicStatus=iicSt; /讀入 IICSTAT,第 0 位表示是否 接收到 ACKbreak;case RDDATA: /讀數(shù)據(jù)模式if(_iicDataCount -)=0) /只要讀取 1 字節(jié)數(shù)據(jù)_iicData_iicPt+=rIICDS;rIICSTAT=0 x90; /停止主設(shè)備讀取模式rIICCON=0 xaf; /釋放 IIC 操作Delay(1); /等待直到停止條件起作用break;sw
44、itch(_iicMode) /根據(jù)當(dāng)前操作模式 _iicData_iicPt+=rIICDS; /未讀完所有數(shù)據(jù)最后一個字節(jié)不能產(chǎn)生 ACKif(_iicDataCount)=0) /如果讀完了所有數(shù)據(jù)(最后一個字節(jié))rIICCON=0 x2f; / 產(chǎn)生 NOACK.釋放 IIC 操作elserIICCON=0 xaf; / 產(chǎn)生 ACK 釋放 IIC 操作break;case WRDATA: /寫數(shù)據(jù)模式if(_iicDataCount-)=0) /如果數(shù)據(jù)寫完rIICSTAT=0 xd0; /停止主設(shè)備發(fā)送傳輸rIICCON=0 xaf; /恢復(fù) IIC 操作Delay(1); /等待
45、,直到停止條件起效break; _iicData_iicPt+=rIICDS;rIICDS=_iicData_iicPt+; /_iicData0 has dummy.for(i=0;i10;i+); /for setup time until rising edge of IICSCLrIICCON=0 xaf;/釋放 IIC 總線操作break;case SETRDADDR:/設(shè)置讀地址模式/Uart_Printf(S%d,_iicDataCount);rIICDS=_iicData_iicPt+; if(_iicDataCount-)=0)break; /IIC operation is
46、 stopped because of IICCON4rIICDS=_iicData_iicPt+for(i=0;i10;i+); /for setup time until rising edge of IICSCLrIICCON=0 xaf;/釋放 IIC 總線操作break;default:break;if(_iicDataCount-)=0)5.7 其他接口電路設(shè)計及編程5.7 其他接口電路設(shè)計及編程5.7.1 定時器編程 讓定時器0的 TOUT0引腳輸出頻率為16K,占空比為 30的 PWM 脈沖調(diào)制波形;定時約0.5秒后產(chǎn)生定時中斷。5.7.1 定時器編程 讓定時器01. 定時器初
47、始化(1) I/O 口設(shè)置 采用以下語句對 PE 口的工作方式進(jìn)行設(shè)置,使之工作在定時器輸出狀態(tài): rPCONE=0 xaaa8; /Tout0/1/2/3/4, RxD0, TxD0 rPUPE |=0 xf8;(2) 定時器時鐘源頻率設(shè)置 通過以下語句來設(shè)置定時器的時鐘源:rTCFG0=0 x1010101; / 預(yù)分頻值為 1rTCFG1=0 x01; / 分割比例=1/4經(jīng)過設(shè)置后,定時器時鐘源頻率 = (MCLK/1)/41. 定時器初始化(3) 設(shè)置輸出波形頻率 通過以下語句來設(shè)置輸出波形的頻率: rTCNTB0=1000; 經(jīng)過設(shè)置,輸出 PWM 波形的頻率為 MCLK/4000
48、; 由于系統(tǒng)采用的 MCLK64M,因此,PWM 波形頻率為 16K。(4) 設(shè)置占空比 通過以下語句來設(shè)置輸出波形的占空比: rTCMPB0=300; 針對實驗要求:300/100030(3) 設(shè)置輸出波形頻率(5) 設(shè)置定時器控制寄存器、啟動定時器 rTCON=0 xaaaa0a; /自動重載模式,關(guān)閉反轉(zhuǎn)功能,手動更 新,關(guān)閉死區(qū)rTCON=0 x999909; /啟動 PWM 操作 定時器啟動后,可以采用示波器觀察 TOUT0輸出波形,是否滿足要求。(5) 設(shè)置定時器控制寄存器、啟動定時器2. 定時器中斷主程序 參考程序如下:volatile int variable0;void Te
49、st_TimerInt(void) rINTMSK=(BIT_GLOBAL|BIT_TIMER0) pISR_TIMER0=(int)Timer0Done; /修改中斷處理函數(shù)的指針 rTCFG0=0 x00f; /dead zone=0, pre0=0 xf /設(shè)定時鐘源頻率 rTCFG1=0 x04; /all interrupt, mux0=1/32 rTCNTB0=0 xffff; /(1/(64MHz/15/32)*0 xffff=0.49s2. 定時器中斷主程序rTCON=0 x02;/手動更新 timer0 的設(shè)置rTCON=0 x01;/T0=one shot,啟動定時器whi
50、le(variable0=0);/等待中斷發(fā)生rTCON=0 x0;/停止定時器rINTMSK=BIT_GLOBAL; /關(guān)閉中斷rTCON=0 x02;3. 定時中斷服務(wù)程序void _irq Timer0Done(void)rI_ISPC=BIT_TIMER0;/清中斷 pending 位variable0+; /更新變量3. 定時中斷服務(wù)程序5.7.2 實時日歷時鐘RTC1. 電路 如圖5-25為 32.768KHZ 晶振的電路連接示例:5.7.2 實時日歷時鐘RTC1. 電路人機接口電路設(shè)計方案及編程學(xué)課件2. 編程(1) 實時時鐘初始化初始化示例程序如下:#define TESTYE
51、AR 0 x99#define TESTMONTH 0 x12#define TESTDAY 0 x31#define TESTDATE 0 x06 /星期五#define TESTHOUR 0 x23#define TESTMIN 0 x59#define TESTSEC 0 x302. 編程void Rtc_Init(void)rRTCCON = 0 x01; /讀寫使能, 1/32768, Normal(merge), No resetrBCDYEAR = TESTYEAR;rBCDMON = TESTMONTH;rBCDDAY = TESTDAY; / SUN:1 MON:2 TUE:3 WED:4 THU:5 FRI:6 SAT:7void Rtc_Init(void) rBCDDATE = TESTDATE;rBCDHOUR = TESTHOUR;rBCDMIN = TESTMIN;rBCDSEC = TESTSEC;rRTCCON = 0 x00; /讀寫禁止 以上程序?qū)刂萍拇嫫鬟M(jìn)行了設(shè)置,并更新了 RTC 日期時間寄存器,從此刻
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 井水污染防控措施方案
- 道路施工周邊居民溝通方案
- 道路施工合同管理方案
- 2026年營養(yǎng)師資格考試模擬試題及答案解析
- 2026年會計專業(yè)繼續(xù)教育稅法實務(wù)考試題庫與答案解析
- 教務(wù)處制定教師課堂教學(xué)評價標(biāo)準(zhǔn)及聽課評課制度完善
- 2026年天文學(xué)基礎(chǔ)知誆及宇宙探索能力測試題
- 2026年機器學(xué)習(xí)模型部署與運維面試題確保模型穩(wěn)定運行的技巧
- 2026年醫(yī)學(xué)檢驗師專業(yè)試題集臨床檢驗技術(shù)與應(yīng)用知識測試
- 2026年幼師基本職業(yè)技能模擬試題集
- 呆滯存貨處理流程
- 互聯(lián)網(wǎng)+非遺項目商業(yè)計劃書
- GB/T 16895.6-2014低壓電氣裝置第5-52部分:電氣設(shè)備的選擇和安裝布線系統(tǒng)
- GB/T 11018.1-2008絲包銅繞組線第1部分:絲包單線
- GB 31633-2014食品安全國家標(biāo)準(zhǔn)食品添加劑氫氣
- 麻風(fēng)病防治知識課件整理
- 手術(shù)室物品清點護理質(zhì)量控制考核標(biāo)準(zhǔn)
- 消防工程監(jiān)理實施細(xì)則
- 權(quán)利的游戲雙語劇本-第Ⅰ季
- 衛(wèi)生部《臭氧消毒技術(shù)規(guī)范》
- 早期復(fù)極綜合征的再認(rèn)識
評論
0/150
提交評論