设计论证书与结题报告基于ARM7与HD7279、12864的键盘显示模块_第1页
设计论证书与结题报告基于ARM7与HD7279、12864的键盘显示模块_第2页
设计论证书与结题报告基于ARM7与HD7279、12864的键盘显示模块_第3页
设计论证书与结题报告基于ARM7与HD7279、12864的键盘显示模块_第4页
设计论证书与结题报告基于ARM7与HD7279、12864的键盘显示模块_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设计类别任务编号报告类型 设计论证书与结题报告 设计题目: 基于arm7与hd7279、12864的键盘显示模块 学 生: 指导教师: 专 业: 电子信息工程2008级 提交日期: 2011年5月7日 2011年 5月论证题目: 键盘与显示模块任务内容键盘与显示是硬件设备的基本组成模块。本项目为实现按键的输入,数码管与液晶屏显示。首先建立硬件连接,之后基于arm7编写,并制作pcb板。 论证内容一、 系统硬件组成:1. 硬件系统描述: 硬件实现:(1)、按键与数码管部分:以arm7lpc2138为核心控制hd7279a ,最终实现按键的串行输入并将输入显示到数码管上。 (有关芯片hd7279a

2、内容请参考“hd7279a 8位数码管64键盘中文”)(2)、lcd显示部分: 以arm7lpc2131为核心控制液晶屏、以并行传输数据方式将内容显示在液晶屏上(有关12864内容请参考“中显zx12864r中文字库lcd”)2. 硬件系统框图: (1)、按键与数码管部分: 键盘arm7 lpc2138hd7279a数码管 (2)、lcd显示部分:arm7 lpc2131lcd12864 数码管3. 原理图 (1)、按键与数码管部分:按键排阻hd7279(2)、lcd显示部分:输入端口排阻插排4. pcb这区域放置lcd点阵lcd控制数码管,按键与点阵控制区键盘区数码管 二、 系统软件设计:1

3、、软件系统设计描述: (1)、按键与数码管部分:lpc2138控制hd7279a读写操作,读取键码值显示在数码管上 (2)、lcd显示部分:lpc2131以并行的方式控制液晶屏显示内容 2主流程图:按键与数码管部分流程图 lcd显示部分流程图3、源代码分析:按键与数码管显示程序:/*- file info -*file name:jpxs.c*last modified date: 2011-05-6*last version:v1.0*description:基于 lpc2138与hd7279 的键盘显示程序设计*-*created by:姚金龙、张翃敔*created date:2011-

4、05-6*e-mail address:546213859*/ /* begin of file */* 包含头文件 */#include #include /* hd7279 指令 */#define cmd_reset 0xa4/ 复位指令#define cmd_mode10xc8/ 0xc8 | a2 a1 a0下载数据且按方式1译码0-f #define cmd_read 0x15/ 读键盘数据指令/* 宏定义 */ #definecs (18) /定义p0.8为hd7279 cs(片选)#defineclk (19)/定义p0.9为hd7279 clk #defineda

5、ta (110)/定义p0.10为hd7279 data/* function name: delay* descriptions: 延时函数* input parameters: uid : 定时器精确延时1us,延时参数,值越大,延时越久* output parameters: 无* returned value: 无*/void delay1u(unsigned long t) t1pr = 0x00000000; /load prescaler t1tcr = 0x00000003; /reset counter and prescaler t1mcr = 0x00000003; /o

6、n match 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 中写指令或数据* *-*input parameters:cmd: 向hd7279发送数据和指令*output parameters:null*va

7、lueof return:null*/void send_byte(unsigned char cmd)unsigned char i; io0clr |= cs;delay1u(48);/ 长延时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;/数据左移一位 io0set |=data;/*function name:init_7279 *decr

8、iptions:hd7279 初始化函数 * *-*input parameters:null*output parameters:null*valueof return:null*/void init_7279(void)unsigned int i;io0clr |= cs;/ 片选使能send_byte(cmd_reset); / 复位 hd7279for(i = 0;i 0x2000;i +);/ 延时,等待 hd7279 完成初始化/*function name:write_7279 *decriptions:向hd7279 中写指令或数据* *-*input parameters:

9、cmd: 向hd7279写指令 * dat:向hd7279写数据*output parameters:null*valueof return:null*/void write_7279(unsigned char cmd, unsigned char dat)send_byte(cmd); / 写指令send_byte(dat);/ 写数据/*function name:receive_byte *decriptions:从 hd7279 中读一个字节* *-*input parameters:null*output parameters:in_byte:返回从hd7279读回的数值*valu

10、eof return:null*/unsigned char receive_byte(void)unsigned char i,in_byte; io0dir &=(data);/数据口改回输入delay1u(48);/长延时for (i=0;i8;i+) io0set |= clk;/先拉高之后再拉低给下降沿脉冲delay1u(8);/短延时 in_byte=in_byte1;/数据左移一位 if(io0pin&0x00000400)/读“1”in_byte=in_byte|0x01; io0clr |=clk; delay1u(8);/短延时 io0dir |=data; /数据口改回输

11、出return (in_byte); /返回读数据/*function name:read7279 *decriptions:从 hd7279 中读数据 * *-*input parameters:command:向hd7279发送读指令*output parameters:receive_byte():返回从hd7279读回的数值*valueof return:null*/unsigned char read7279(unsigned char command)send_byte (command);/发送读指令return (receive_byte();/返回读数据/*function

12、name:irq_eint0 *descriptions: eint0的中断服务程序 *-*input parameters:null*output parameters:null*valueof return:null*/void irq_eint0() _irq unsigned char date ; date = read7279(cmd_read);/调用读函数 write_7279(cmd_mode1,date%10);/数码管第一位写 write_7279(cmd_mode1|0x01,date/10);/数码管第二位写write_7279(cmd_mode1|0x02,date

13、/100);/数码管第三位写extint |= 0x01;vicvectaddr = 0; /* function name: main* descriptions: 主函数* input parameters: 无* output parameters: 无* returned value: 无*/main()pinsel0=0x0;io0dir |= 0x00000700; pinsel0 = (pinsel0 & 0xfffffff3) | 0x0c; /以下五句为中断配置extmode |= 0x01;extpolar &= 0x0e;vicintselect &= (114);vic

14、vectcntl15 = 0x20 | 14;vicvectaddr15 = (unsigned int)irq_eint0;vicintenable = (114);init_7279(); /hd7279 初始化 while(1) lcd显示程序:/* #include config.h/*定义与lcd相关的宏*/#define lcd_data 0xff #define lcd_di 18 /与p0.8对应 #define lcd_rw 19 /与p0.9对应#define lcd_en 110 /与p0.10对应.#define lcd_psb 111 /与p0.11对应/电路直接拉高

15、#define lcd_rst 112 /与p0.12对应/上电自动复位,一般也可以不接*#define clear_screen 0x01 /清屏 #define reset_address 0x02 /地址复位#define set_point 0x06 / 0000_0110#define display_set 0x0c / 显示设定#define cursor_shift_control 0x1c /0001_1100#define function_set 0x30 / 功能设定 基本指令集#define function_set_ext 0x36 /功能设定 扩充指令集 绘图开/

16、#define set_cgram_add #define set_ddram_add 0x80 /#define write_data_intenalram /*void delay_1ms(uint8 d) /延时函数 uint8 i; while (d-!=0) for(i=0;i40;i+); /*void lcd_data_input() io0dir = io0dir & (lcd_data); /把p1.16-p1.23设定为输入/*void lcd_data_output() io0dir = io0dir | lcd_data; /设定p0.0-p0.7为输出/*/void

17、checkstate( )/状态检查,lcd是否忙?delay_1ms(200); /延时/* 函数名称:gpio_init(* 函数功能:初始化io端口,包含一个uart0,三个按键输入,以及几个普通的输入输出端口.* 入口参数:无* 出口参数:无 */void gpio_init() pinsel0 = 0; /p0口设为io功能 io0dir= 0xff8;/* 函数名称: w_data(unsigned char data_lcm)* 函数功能:给lcd发送数据或者命令.* 入口参数:data_lcm* 出口参数:无 */void w_data(uint8 data_lcm)check

18、state();lcd_data_output(); io0set = lcd_di; / 将rs拉高io0clr = lcd_rw; / 将rw 清0io0clr = 0xff; / p0.0p0.7清0io0set = data_lcm; / 将数据data_lcm 输出io0set = lcd_en; /将 en 拉高io0clr = lcd_en; /将 en 清0 产生边沿/* 函数名称:w_instruct* 函数功能:向lcd输入命令* 入口参数:data_lcm* 出口参数: 无*/void w_instruct(uint8 data_lcm)checkstate();lcd_

19、data_output(); io0clr = lcd_di; / rs清零io0clr = lcd_rw; /rw清零io0clr = 0xff; / p0.0p0.7 清零io0set = data_lcm; /输出 数据data_lcmio0set = lcd_en; io0clr = lcd_en;/* 函数名称lcd_init()* 函数功能:初始化lcd显示屏* 入口参数:无* 出口参数:无 */void init_lcd(void) io0set = lcd_rst; io0clr = lcd_rst;/ 复位lcdio0set = lcd_rst;io0set = lcd_ps

20、b; / 选择并行口io0set = lcd_psb;w_instruct(function_set); / 输出命令 功能选择为基本指令集w_instruct(display_set); / 显示状态命令w_instruct(clear_screen); / 清屏w_instruct(reset_address); / 复位地址w_instruct(set_ddram_add); /设定ddram地址/*void wenzi(void)char line1 = 月落乌啼霜满天 ; 要输出的数据char line2 = 江枫渔火对愁眠 ;char line3 = 姑苏城外寒山寺 ;char line4 = 夜半钟声到客船 ;uint8 i ;w_instruct(0x80); for(i=0;i16;i+) / 写数据w_data(line1i); w_instruct(0x90);for(i=0;i16;i+)w_data(line2i);w_instruct(0x88);for(i=0;i16;i+)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论