設(shè)計(jì)論證書與結(jié)題報(bào)告基于ARM7與HD7279、12864的鍵盤顯示模塊_第1頁
設(shè)計(jì)論證書與結(jié)題報(bào)告基于ARM7與HD7279、12864的鍵盤顯示模塊_第2頁
設(shè)計(jì)論證書與結(jié)題報(bào)告基于ARM7與HD7279、12864的鍵盤顯示模塊_第3頁
設(shè)計(jì)論證書與結(jié)題報(bào)告基于ARM7與HD7279、12864的鍵盤顯示模塊_第4頁
設(shè)計(jì)論證書與結(jié)題報(bào)告基于ARM7與HD7279、12864的鍵盤顯示模塊_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、設(shè)計(jì)類別任務(wù)編號(hào)報(bào)告類型 設(shè)計(jì)論證書與結(jié)題報(bào)告 設(shè)計(jì)題目: 基于arm7與hd7279、12864的鍵盤顯示模塊 學(xué) 生: 指導(dǎo)教師: 專 業(yè): 電子信息工程2008級(jí) 提交日期: 2011年5月7日 2011年 5月論證題目: 鍵盤與顯示模塊任務(wù)內(nèi)容鍵盤與顯示是硬件設(shè)備的基本組成模塊。本項(xiàng)目為實(shí)現(xiàn)按鍵的輸入,數(shù)碼管與液晶屏顯示。首先建立硬件連接,之后基于arm7編寫,并制作pcb板。 論證內(nèi)容一、 系統(tǒng)硬件組成:1. 硬件系統(tǒng)描述: 硬件實(shí)現(xiàn):(1)、按鍵與數(shù)碼管部分:以arm7lpc2138為核心控制hd7279a ,最終實(shí)現(xiàn)按鍵的串行輸入并將輸入顯示到數(shù)碼管上。 (有關(guān)芯片hd7279a

2、內(nèi)容請(qǐng)參考“hd7279a 8位數(shù)碼管64鍵盤中文”)(2)、lcd顯示部分: 以arm7lpc2131為核心控制液晶屏、以并行傳輸數(shù)據(jù)方式將內(nèi)容顯示在液晶屏上(有關(guān)12864內(nèi)容請(qǐng)參考“中顯zx12864r中文字庫lcd”)2. 硬件系統(tǒng)框圖: (1)、按鍵與數(shù)碼管部分: 鍵盤arm7 lpc2138hd7279a數(shù)碼管 (2)、lcd顯示部分:arm7 lpc2131lcd12864 數(shù)碼管3. 原理圖 (1)、按鍵與數(shù)碼管部分:按鍵排阻hd7279(2)、lcd顯示部分:輸入端口排阻插排4. pcb這區(qū)域放置lcd點(diǎn)陣lcd控制數(shù)碼管,按鍵與點(diǎn)陣控制區(qū)鍵盤區(qū)數(shù)碼管 二、 系統(tǒng)軟件設(shè)計(jì):1

3、、軟件系統(tǒng)設(shè)計(jì)描述: (1)、按鍵與數(shù)碼管部分:lpc2138控制hd7279a讀寫操作,讀取鍵碼值顯示在數(shù)碼管上 (2)、lcd顯示部分:lpc2131以并行的方式控制液晶屏顯示內(nèi)容 2主流程圖:按鍵與數(shù)碼管部分流程圖 lcd顯示部分流程圖3、源代碼分析:按鍵與數(shù)碼管顯示程序:/*- file info -*file name:jpxs.c*last modified date: 2011-05-6*last version:v1.0*description:基于 lpc2138與hd7279 的鍵盤顯示程序設(shè)計(jì)*-*created by:姚金龍、張翃敔*created date:2011-

4、05-6*e-mail address:546213859*/ /* begin of file */* 包含頭文件 */#include #include /* hd7279 指令 */#define cmd_reset 0xa4/ 復(fù)位指令#define cmd_mode10xc8/ 0xc8 | a2 a1 a0下載數(shù)據(jù)且按方式1譯碼0-f #define cmd_read 0x15/ 讀鍵盤數(shù)據(jù)指令/* 宏定義 */ #definecs (18) /定義p0.8為hd7279 cs(片選)#defineclk (19)/定義p0.9為hd7279 clk #definedata (11

5、0)/定義p0.10為hd7279 data/* function name: delay* descriptions: 延時(shí)函數(shù)* input parameters: uid : 定時(shí)器精確延時(shí)1us,延時(shí)參數(shù),值越大,延時(shí)越久* output parameters: 無* returned value: 無*/void delay1u(unsigned long t) t1pr = 0x00000000; /load prescaler t1tcr = 0x00000003; /reset counter and prescaler t1mcr = 0x00000003; /on matc

6、h reset the counter and generate an interrupt t1mr0 = t*0x0f; /set the cycle time t1tcr = 0x00000001; /enable timer while(t1ir & 0x01) = 0); t1ir = 0x01; t1tcr = 0x00000000;/*function name:send_byte *decriptions:向hd7279 中寫指令或數(shù)據(jù)* *-*input parameters:cmd: 向hd7279發(fā)送數(shù)據(jù)和指令*output parameters:null*valueof

7、return:null*/void send_byte(unsigned char cmd)unsigned char i; io0clr |= cs;delay1u(48);/ 長(zhǎng)延時(shí)for(i = 0;i 8;i+)if(cmd&0x80) / 寫“1”io0set|=data;else/ 寫“0”io0clr |=data; io0set|=clk; / clk形成下降沿 delay1u(8);io0clr |=clk; delay1u(8);cmd = cmd * 2;/數(shù)據(jù)左移一位 io0set |=data;/*function name:init_7279 *decription

8、s:hd7279 初始化函數(shù) * *-*input parameters:null*output parameters:null*valueof return:null*/void init_7279(void)unsigned int i;io0clr |= cs;/ 片選使能send_byte(cmd_reset); / 復(fù)位 hd7279for(i = 0;i 0x2000;i +);/ 延時(shí),等待 hd7279 完成初始化/*function name:write_7279 *decriptions:向hd7279 中寫指令或數(shù)據(jù)* *-*input parameters:cmd: 向

9、hd7279寫指令 * dat:向hd7279寫數(shù)據(jù)*output parameters:null*valueof return:null*/void write_7279(unsigned char cmd, unsigned char dat)send_byte(cmd); / 寫指令send_byte(dat);/ 寫數(shù)據(jù)/*function name:receive_byte *decriptions:從 hd7279 中讀一個(gè)字節(jié)* *-*input parameters:null*output parameters:in_byte:返回從hd7279讀回的數(shù)值*valueof re

10、turn:null*/unsigned char receive_byte(void)unsigned char i,in_byte; io0dir &=(data);/數(shù)據(jù)口改回輸入delay1u(48);/長(zhǎng)延時(shí)for (i=0;i8;i+) io0set |= clk;/先拉高之后再拉低給下降沿脈沖delay1u(8);/短延時(shí) in_byte=in_byte1;/數(shù)據(jù)左移一位 if(io0pin&0x00000400)/讀“1”in_byte=in_byte|0x01; io0clr |=clk; delay1u(8);/短延時(shí) io0dir |=data; /數(shù)據(jù)口改回輸出retur

11、n (in_byte); /返回讀數(shù)據(jù)/*function name:read7279 *decriptions:從 hd7279 中讀數(shù)據(jù) * *-*input parameters:command:向hd7279發(fā)送讀指令*output parameters:receive_byte():返回從hd7279讀回的數(shù)值*valueof return:null*/unsigned char read7279(unsigned char command)send_byte (command);/發(fā)送讀指令return (receive_byte();/返回讀數(shù)據(jù)/*function name:i

12、rq_eint0 *descriptions: eint0的中斷服務(wù)程序 *-*input parameters:null*output parameters:null*valueof return:null*/void irq_eint0() _irq unsigned char date ; date = read7279(cmd_read);/調(diào)用讀函數(shù) write_7279(cmd_mode1,date%10);/數(shù)碼管第一位寫 write_7279(cmd_mode1|0x01,date/10);/數(shù)碼管第二位寫write_7279(cmd_mode1|0x02,date/100);

13、/數(shù)碼管第三位寫extint |= 0x01;vicvectaddr = 0; /* function name: main* descriptions: 主函數(shù)* input parameters: 無* output parameters: 無* returned value: 無*/main()pinsel0=0x0;io0dir |= 0x00000700; pinsel0 = (pinsel0 & 0xfffffff3) | 0x0c; /以下五句為中斷配置extmode |= 0x01;extpolar &= 0x0e;vicintselect &= (114);vicvectcn

14、tl15 = 0x20 | 14;vicvectaddr15 = (unsigned int)irq_eint0;vicintenable = (114);init_7279(); /hd7279 初始化 while(1) lcd顯示程序:/* #include config.h/*定義與lcd相關(guān)的宏*/#define lcd_data 0xff #define lcd_di 18 /與p0.8對(duì)應(yīng) #define lcd_rw 19 /與p0.9對(duì)應(yīng)#define lcd_en 110 /與p0.10對(duì)應(yīng).#define lcd_psb 111 /與p0.11對(duì)應(yīng)/電路直接拉高#defin

15、e lcd_rst 112 /與p0.12對(duì)應(yīng)/上電自動(dòng)復(fù)位,一般也可以不接*#define clear_screen 0x01 /清屏 #define reset_address 0x02 /地址復(fù)位#define set_point 0x06 / 0000_0110#define display_set 0x0c / 顯示設(shè)定#define cursor_shift_control 0x1c /0001_1100#define function_set 0x30 / 功能設(shè)定 基本指令集#define function_set_ext 0x36 /功能設(shè)定 擴(kuò)充指令集 繪圖開/#defin

16、e set_cgram_add #define set_ddram_add 0x80 /#define write_data_intenalram /*void delay_1ms(uint8 d) /延時(shí)函數(shù) uint8 i; while (d-!=0) for(i=0;i40;i+); /*void lcd_data_input() io0dir = io0dir & (lcd_data); /把p1.16-p1.23設(shè)定為輸入/*void lcd_data_output() io0dir = io0dir | lcd_data; /設(shè)定p0.0-p0.7為輸出/*/void checks

17、tate( )/狀態(tài)檢查,lcd是否忙?delay_1ms(200); /延時(shí)/* 函數(shù)名稱:gpio_init(* 函數(shù)功能:初始化io端口,包含一個(gè)uart0,三個(gè)按鍵輸入,以及幾個(gè)普通的輸入輸出端口.* 入口參數(shù):無* 出口參數(shù):無 */void gpio_init() pinsel0 = 0; /p0口設(shè)為io功能 io0dir= 0xff8;/* 函數(shù)名稱: w_data(unsigned char data_lcm)* 函數(shù)功能:給lcd發(fā)送數(shù)據(jù)或者命令.* 入口參數(shù):data_lcm* 出口參數(shù):無 */void w_data(uint8 data_lcm)checkstate(

18、);lcd_data_output(); io0set = lcd_di; / 將rs拉高io0clr = lcd_rw; / 將rw 清0io0clr = 0xff; / p0.0p0.7清0io0set = data_lcm; / 將數(shù)據(jù)data_lcm 輸出io0set = lcd_en; /將 en 拉高io0clr = lcd_en; /將 en 清0 產(chǎn)生邊沿/* 函數(shù)名稱:w_instruct* 函數(shù)功能:向lcd輸入命令* 入口參數(shù):data_lcm* 出口參數(shù): 無*/void w_instruct(uint8 data_lcm)checkstate();lcd_data_o

19、utput(); io0clr = lcd_di; / rs清零io0clr = lcd_rw; /rw清零io0clr = 0xff; / p0.0p0.7 清零io0set = data_lcm; /輸出 數(shù)據(jù)data_lcmio0set = lcd_en; io0clr = lcd_en;/* 函數(shù)名稱lcd_init()* 函數(shù)功能:初始化lcd顯示屏* 入口參數(shù):無* 出口參數(shù):無 */void init_lcd(void) io0set = lcd_rst; io0clr = lcd_rst;/ 復(fù)位lcdio0set = lcd_rst;io0set = lcd_psb; / 選

20、擇并行口io0set = lcd_psb;w_instruct(function_set); / 輸出命令 功能選擇為基本指令集w_instruct(display_set); / 顯示狀態(tài)命令w_instruct(clear_screen); / 清屏w_instruct(reset_address); / 復(fù)位地址w_instruct(set_ddram_add); /設(shè)定ddram地址/*void wenzi(void)char line1 = 月落烏啼霜滿天 ; 要輸出的數(shù)據(jù)char line2 = 江楓漁火對(duì)愁眠 ;char line3 = 姑蘇城外寒山寺 ;char line4 = 夜半鐘聲到客船 ;uint8 i ;w_instruct(0x80); for(i=0;i16;i+) / 寫數(shù)據(jù)w_data(line1i); w_instruct(0x90);for(i=0;i16;i+)w_data(line2i);w_instruct(0x88);for(i=0;i16;i+)w_

溫馨提示

  • 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論