收藏 分享(赏)

显示项目.docx

上传人:拉拉链 文档编号:19224173 上传时间:2023-03-14 格式:DOCX 页数:31 大小:6.15MB
下载 相关 举报
显示项目.docx_第1页
第1页 / 共31页
显示项目.docx_第2页
第2页 / 共31页
显示项目.docx_第3页
第3页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、宜宾职业技术学院 显示与按键项目报告班级:电 子11201班组员:吴 意 201211209 毛俊秀 201214621 曾万兵 201215437 陈 鼎 201210602二一三年十月二十三日目 录1、查找电路原理图2、制作电路原理图.3、绘制PCB图.4、原件的介绍5、实物的焊接过程.6、烧录程序7、软件.8、课堂总结序 言单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到了广泛的应用,几乎是从小的电子产品到达的工业控制,单片机都起到了举足轻重的作用。单片机在人们的生活中得到广泛的应用。本文介绍了基于单片机的按键和显示,详细的讨论了它从软件上实现的过程,以及硬件接

2、口的原理及其实现,根据输出来判断按下的是什么键,还有按键的扫描过程,及其扫描的程序。显示我们主要是以1602和12864来实现显示,并使用软件来下载,下载的程序来控制1602上的显示。一、 查找电路原理图本次的设计的目标为单片的按键和显示,主要是采用AT89C52单片机作为核心,用矩阵键盘电路和显示等模块构成,分别对按键信息和显示电路以及软件、硬件各个部分进行控制:这个设计主要采用了C语言编程来实现对单片机的控制。实际运作单片机会将检测到的信号转换成数字,显示在1602或者是12864上。为此我们就需要去查找资料,了解按键和显示的原理以及原理图。二、 制作电路原理图经过我们自己在网上查找图片,

3、了解电路的原理然后再绘制。在绘制之前我们要理解并且找出引脚的了解方法,正确的会出原理图。绘制出以下原理图:三、 绘制PCB图完成了电路的原理图后,我们要绘制PCB图。在绘制PCB的过程中出现了很多的问题,我们也在这上面花费了很多的时间,并且完成的效果并不佳。有点改进的地方也很多,我们应该注意。以下就是我们完成的PCB图:四、原件的介绍1602显示的资料液晶显示器各种图形的显示原理 线段的显示:点阵图形式液晶由MN个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共168=128个点组成,屏上6416个显示单元与显示RAM区1024字节相对应,每

4、一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。字符的显示用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其

5、它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。1602字符型LCD简介1字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。一般1602字符型液晶显示器实物如图21602LCD的基本参数及引脚功能 3.LCD1602主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V

6、)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm4.引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表1 引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”

7、,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。5. 与单片机的连接如下图所示:12864资料模块的接口引脚功能五、 实物焊接过程在完成元件的检测和介绍后,我们要对电

8、路进行焊接,以下是我们焊接过程的图片:焊接好实物要对照原理图连接导线,以下是连接过程:六、 烧录程序完成实物后就要进行软件的操作,要把我们的软件通过烧录软件、电源和下载线进行下载把程序烧录在单片机内。七、 软件1602的程序:#include #include sbit rs= P20;sbit rw = P21;sbit ep = P22;unsigned char code dis1 = 1234567890abcdef;unsigned char code dis2 = ABCDEFGHIJKLMNop;void delay(unsigned char ms)unsigned char

9、i;while(ms-)for(i = 0; i 250; i+)_nop_();_nop_();_nop_();_nop_();bit lcd_bz()bit result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result = (bit)(P0 & 0x80);ep = 0;return result;void lcd_wcmd(unsigned char cmd)while(lcd_bz();/判断LCD是否忙碌rs = 0;rw = 0;ep = 0;_nop_();_nop_();P0 = cmd;_nop_();_

10、nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;void lcd_pos(unsigned char pos) lcd_wcmd(pos | 0x80);void lcd_wdat(unsigned char dat)while(lcd_bz();/判断LCD是否忙碌rs = 1;rw = 0;ep = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;void lcd_init

11、() /初始化lcd_wcmd(0x38); /8位数据,双列显示,5*7的字形delay(1);lcd_wcmd(0x0c);/开启显示屏,关光标,光标不闪烁delay(1);lcd_wcmd(0x06); /显示地址,递增的方式,写一个数据后,向后移一位delay(1);lcd_wcmd(0x01); /清屏delay(1);void main(void)unsigned char i;lcd_init();/ 初始化LCDdelay(25);lcd_pos(0x00);/设置显示位置i = 0;while(dis1i != 0)lcd_wdat(dis1i);/显示字符i+;delay(

12、25);lcd_pos(0x38);/ 设置显示位置i = 0;while(dis2i != 0)lcd_wdat(dis2i);/ 显示字符i+;delay(25);12864程序#include #include sbit lcd_sclk=P22; /*接口定义:lcd_sclk 就是 LCD 的 sclk*/ sbit lcd_sid=P21; /*接口定义:lcd_sid 就是 LCD 的 sid*/ sbit lcd_rs=P20; /*接口定义:lcd_rs 就是 LCD 的 rs*/ sbit lcd_reset=P10; /*接口定义:lcd_reset 就是 LCD 的 r

13、eset*/ sbit lcd_cs1=P11; /*接口定义:lcd_cs1 就是 LCD 的 cs1*/ sbit Rom_IN=P12; /*字库 IC 接口定义:Rom_IN 就是字库 IC 的 SI*/ sbit Rom_OUT=P13; /*字库 IC 接口定义:Rom_OUT 就是字库 IC 的 SO*/sbit Rom_SCK=P14; /*字库 IC 接口定义:Rom_SCK 就是字库 IC 的 SCK*/sbit Rom_CS=P15; /*字库 IC 接口定义 Rom_CS 就是字库 IC 的 CS#*/ #define uchar unsigned char #defi

14、ne uint unsigned int #define ulong unsigned long uchar code bmp1; uchar code bmp2; uchar code jiong1=/*- 文字: 囧 -*/ /*- 宋体 12; 此字体下对应的点阵为:宽 x 高=16x16 -*/ 0x00,0xFE,0x82,0x42,0xA2,0x9E,0x8A,0x82,0x86,0x8A,0xB2,0x62,0x02,0xFE,0x00,0x00, 0x00,0x7F,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0

15、x7F,0x00,0x00; uchar code lei1=/*- 文字: 畾 -*/ /*- 宋体 12; 此字体下对应的点阵为:宽 x 高=16x16 -*/ 0x80,0x80,0x80,0xBF,0xA5,0xA5,0xA5,0x3F,0xA5,0xA5,0xA5,0xBF,0x80,0x80,0x80,0x00, 0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00,0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00; /*写指令到LCD 模块*/void transfer_command_lcd(int data1)char

16、i;lcd_rs=0;for(i=0;i8;i+)lcd_sclk=0;if(data1&0x80) lcd_sid=1;else lcd_sid=0;lcd_sclk=1;data1=data1=1;/*写数据到LCD 模块*/void transfer_data_lcd(int data1)char i;lcd_rs=1;for(i=0;i8;i+)lcd_sclk=0;if(data1&0x80) lcd_sid=1;else lcd_sid=0;lcd_sclk=1;data1=data1=1;/*延时*/void delay(int n_ms)int j,k;for(j=0;jn_m

17、s;j+)for(k=0;k4&0x0f); /*设置列地址的高4 位*/transfer_command_lcd(column&0x0f); /*设置列地址的低4 位*/*全屏清屏*/ void clear_screen() uchar i,j; lcd_cs1=0; Rom_CS = 1; for(i=0;i9;i+) transfer_command_lcd(0xb0+i); transfer_command_lcd(0x10); transfer_command_lcd(0x00); for(j=0;j132;j+) transfer_data_lcd(0x00); lcd_cs1=1

18、; /*显示 128x64 点阵图像*/ void display_128x64(uchar *dp) uint i,j; lcd_cs1=0; for(j=0;j8;j+) lcd_address(j+1,1); for (i=0;i128;i+) transfer_data_lcd(*dp); /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/ dp+; lcd_cs1=1; /*显示 16x16 点阵图像、汉字、生僻字或 16x16 点阵的其他图标*/ void display_graphic_16x16(uint page,uint column,uchar *dp)

19、 uint i,j; lcd_cs1=0; Rom_CS = 1; for(j=0;j2;j+) lcd_address(page+j,column); for (i=0;i16;i+) transfer_data_lcd(*dp); /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/ dp+; lcd_cs1=1; /*显示 8x16 点阵图像、ASCII, 或 8x16 点阵的自造字符、其他图标*/ void display_graphic_8x16(uint page,uchar column,uchar *dp) uint i,j; lcd_cs1=0; for(j=

20、0;j2;j+) lcd_address(page+j,column); for (i=0;i4)&0x0f)+0x10; transfer_command_lcd(page_address); /*Set Page Address*/ transfer_command_lcd(column_address_H); /*Set MSB of column Address*/ transfer_command_lcd(column_address_L); /*Set LSB of column Address*/ for (col_cnt=0;col_cnt6;col_cnt+) transfe

21、r_data_lcd(*dp); dp+; lcd_cs1=1; /*送指令到晶联讯字库 IC*/ void send_command_to_ROM( uchar datu ) uchar i; for(i=0;i8;i+ ) if(datu&0x80) Rom_IN = 1; else Rom_IN = 0; datu = datu1; Rom_SCK=0; Rom_SCK=1; /*从晶联讯字库 IC 中取汉字或字符数据(1 个字节)*/ static uchar get_data_from_ROM( ) uchar i; uchar ret_data=0; Rom_SCK=1; for(

22、i=0;i8;i+) Rom_OUT=1; Rom_SCK=0; ret_data=ret_data1; if( Rom_OUT ) ret_data=ret_data+1; else ret_data=ret_data+0; Rom_SCK=1; return(ret_data); /*从相关地址(addrHigh:地址高字节,addrMid:地址中字节,addrLow:地址低字节)中连续读出 DataLen 个字节的数据到 pBuff 的地址*/ /*连续读取*/ void get_n_bytes_data_from_ROM(uchar addrHigh,uchar addrMid,uch

23、ar addrLow,uchar *pBuff,uchar DataLen ) uchar i; Rom_CS = 0; lcd_cs1=1; Rom_SCK=0; send_command_to_ROM(0x03); send_command_to_ROM(addrHigh);send_command_to_ROM(addrMid); send_command_to_ROM(addrLow); for(i = 0; i 0x00) if(texti=0xb0) &(texti=0xa1) /*国标简体(GB2312)汉字在晶联讯字库 IC 中的地址由以下公式来计算:*/ /*Address

24、= (MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0*/ /*由于担心 8 位单片机有乘法溢出问题,所以分三部取地址*/ fontaddr = (texti- 0xb0)*94; fontaddr += (texti+1-0xa1)+846; fontaddr = (ulong)(fontaddr*32); addrHigh = (fontaddr&0xff0000)16; /*地址的高 8 位,共 24 位*/ addrMid = (fontaddr&0xff00)8; /*地址的中 8 位,共 24 位*/ addrL

25、ow = fontaddr&0xff; /*地址的低 8 位,共 24 位*/ get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32 );/*取 32 个字节的数据,存到fontbuf32*/ display_graphic_16x16(y,x,fontbuf);/*显示汉字到 LCD 上,y 为页地址,x 为列地址,fontbuf为数据*/ i+=2; x+=16; else if(texti=0x20) &(texti16; addrMid = (fontaddr&0xff00)8; addrLow = fontaddr

26、&0xff; get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,16 );/*取 16 个字节的数据,存到fontbuf32*/ display_graphic_8x16(y,x,fontbuf);/*显示 8x16 的 ASCII 字到 LCD 上,y 为页地址,x 为列地址,fontbuf为数据*/ i+=1; x+=8; else i+; void display_string_5x7(uchar y,uchar x,uchar *text) unsigned char i= 0; unsigned char addrH

27、igh,addrMid,addrLow ; while(texti0x00) if(texti=0x20) &(texti16; addrMid = (fontaddr&0xff00)8; addrLow = fontaddr&0xff; get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,8);/*取 8 个字节的数据,存到fontbuf32*/ display_graphic_5x7(y,x,fontbuf);/*显示 5x7 的 ASCII 字到 LCD 上,y 为页地址,x 为列地址,fontbuf为数据*/ i+=1;

28、 x+=6; else i+; /=main program= void main(void) uchar a;Rom_CS=1; lcd_cs1=0; initial_lcd(); clear_screen(); /clear aldisplay_GB2312_string(1,1,宜宾职业技术学院); /*在第 1 页,第 1 列,显示一串 16x16 点阵汉字或 8x16 的 ASCII 字*/ display_GB2312_string(3,1,好好学习天天向上); /*显示一串 16x16 点阵汉字或 8x16 的 ASCII 字.以下雷同*/ display_GB2312_stri

29、ng(5,1,电子信息工程系); display_GB2312_string(7,1,电子信息工程系); delay(1100); /延时clear_screen(); /清屏while(1) a=Key_Scan(); if(a!=0) clear_screen(); if(a=0) /按下0键display_string_5x7(1,1,000000000000000000000);/在第一行显示一排5*7的0display_string_5x7(2,1,000000000000000000000);/在第二行显示一排5*7的0display_string_5x7(3,1,00000000

30、0000000000000);/在第三行显示一排5*7的0display_string_5x7(4,1,000000000000000000000);/在第四行显示一排5*7的0display_string_5x7(5,1,000000000000000000000);/在第五行显示一排5*7的0display_string_5x7(6,1,000000000000000000000);/在第六行显示一排5*7的0display_string_5x7(7,1,000000000000000000000);/在第七行显示一排5*7的0display_string_5x7(8,1,00000000

31、0000000000000);/在第八行显示一排5*7的0 if(a=1)display_string_5x7(1,1,111111111111111111111);/在第一行显示一排5*7的1display_string_5x7(2,1,111111111111111111111);/在第二行显示一排5*7的1display_string_5x7(3,1,111111111111111111111);/在第三行显示一排5*7的1display_string_5x7(4,1,111111111111111111111);/在第四行显示一排5*7的1display_string_5x7(5,1,111111111111111111111);/在第五行显示一排5*7的1display_string_5x7(6,1,111111111111111111111);/在第六行显示一排5*7的1display_string_5x7(7,1,111111111111111111111);/在第七行显示一排5*7的1display_string_5x7(8,1,111111111111111111111);/在第八行显示一排5*7的1 if(a=2)display_string_5x7(1,1,222222222222222222

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 企业文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报