单片机显示与按键项目报告 - 图文(4)

2019-03-22 12:57

电子信息工程技术专业《外围电路模块设计》 显示与按键

{

case 0xed: return '4';//P1^3 低返回'4' case 0xdd: return '5';//P1^2 低返回'5' case 0xbd: return '6';//P1^1 低返回'6' case 0x7d: return '7';//P1^0 低返回'7'

default: break;//没有本行的键按下继续下面扫描 }

//---------------------------------------------------- //-------------3-------------------------------------- P2=0XFB;

switch (P2)//测P1^0~~~P1^3 有没有低的 {

case 0xeb: return '8';//P1^3 低返回'8' case 0xdb: return '9';//P1^2 低返回'9' case 0xbb: return 'A';//P1^1 低返回'A' case 0x7b: return 'B';//P1^0 低返回'B'

default: break;//没有本行的键按下继续下面扫描 }

//---------------------------------------------------- //-------------4-------------------------------------- P2=0XF7;

switch (P2)//测P1^0~~~P1^3 有没有低的 {

case 0xe7: return 'C';//P1^3 低返回'C' case 0xd7: return 'D';//P1^2 低返回'D' case 0xb7: return 'E';//P1^1 低返回'E' case 0x77: return 'F';//P1^0 低返回'F' default: break;//没有键按下继续下面 } }

return 0; }

/*LCD 模块初始化*/ void initial_lcd() {

lcd_cs1=0; Rom_CS = 1;

lcd_reset=0; /*低电平复位*/ delay(20);

lcd_reset=1; /*复位完毕*/ delay(20);

transfer_command_lcd(0xe2); /*软复位*/ delay(5);

transfer_command_lcd(0x2c); /*升压步聚 1*/

16

电子信息工程技术专业《外围电路模块设计》 显示与按键

delay(5);

transfer_command_lcd(0x2e); /*升压步聚 2*/ delay(5);

transfer_command_lcd(0x2f); /*升压步聚 3*/ delay(5);

transfer_command_lcd(0x23); /*粗调对比度,可设置范围 0x20~0x27*/ transfer_command_lcd(0x81); /*微调对比度*/

transfer_command_lcd(0x1f); /*0x28,微调对比度的值,可设置范围 0x00~0x3f*/ transfer_command_lcd(0xa2); /*1/9 偏压比(bias)*/ transfer_command_lcd(0xc8); /*行扫描顺序:从上到下*/ transfer_command_lcd(0xa0); /*列扫描顺序:从左到右*/ transfer_command_lcd(0x40); /*起始行:第一行开始*/ transfer_command_lcd(0xaf); /*开显示*/ lcd_cs1=1; }

void lcd_address(uint page,uint column) {

column=column-0x01;

transfer_command_lcd(0xb0+page-1); /*设置页地址*/

transfer_command_lcd(0x10+(column>>4&0x0f)); /*设置列地址的高4 位*/ transfer_command_lcd(column&0x0f); /*设置列地址的低4 位*/ }

/*全屏清屏*/

void clear_screen() {

uchar i,j; lcd_cs1=0; Rom_CS = 1; for(i=0;i<9;i++) {

transfer_command_lcd(0xb0+i); transfer_command_lcd(0x10); transfer_command_lcd(0x00); for(j=0;j<132;j++) {

transfer_data_lcd(0x00); } }

lcd_cs1=1; }

/*显示 16x16 点阵图像、汉字、生僻字或 16x16 点阵的其他图标*/

17

电子信息工程技术专业《外围电路模块设计》 显示与按键

void display_graphic_16x16(uint page,uint column,uchar *dp) {

uint i,j; lcd_cs1=0; Rom_CS = 1; for(j=0;j<2;j++) {

lcd_address(page+j,column); for (i=0;i<16;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=0;j<2;j++) {

lcd_address(page+j,column); for (i=0;i<8;i++) {

transfer_data_lcd(*dp); /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/ dp++; } }

lcd_cs1=1; }

/*显示 5*7 点阵图像、ASCII, 或 5x7 点阵的自造字符、其他图标*/ void display_graphic_5x7(uint page,uchar column,uchar *dp) {

uint col_cnt;

uchar page_address;

uchar column_address_L,column_address_H; page_address = 0xb0+page-1; lcd_cs1=0;

column_address_L =(column&0x0f)-1;

column_address_H =((column>>4)&0x0f)+0x10;

transfer_command_lcd(page_address); /*Set Page Address*/

transfer_command_lcd(column_address_H); /*Set MSB of column Address*/

18

电子信息工程技术专业《外围电路模块设计》 显示与按键

transfer_command_lcd(column_address_L); /*Set LSB of column Address*/ for (col_cnt=0;col_cnt<6;col_cnt++) {

transfer_data_lcd(*dp); dp++; }

lcd_cs1=1; }

/****送指令到晶联讯字库 IC***/

void send_command_to_ROM( uchar datu ) {

uchar i;

for(i=0;i<8;i++ ) {

if(datu&0x80) Rom_IN = 1; else

Rom_IN = 0; datu = datu<<1; Rom_SCK=0; Rom_SCK=1; } }

/****从晶联讯字库 IC 中取汉字或字符数据(1 个字节)***/ static uchar get_data_from_ROM( ) {

uchar i;

uchar ret_data=0; Rom_SCK=1; for(i=0;i<8;i++) {

Rom_OUT=1; Rom_SCK=0;

ret_data=ret_data<<1; 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 的地

19

电子信息工程技术专业《外围电路模块设计》 显示与按键

址*/

/*连续读取*/

void get_n_bytes_data_from_ROM(uchar addrHigh,uchar addrMid,uchar 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 < DataLen; i++ )

*(pBuff+i) =get_data_from_ROM(); Rom_CS = 1; }

/******************************************************************/ ulong fontaddr=0;

void display_GB2312_string(uchar y,uchar x,uchar *text) {

uchar i= 0;

uchar addrHigh,addrMid,addrLow ; uchar fontbuf[32]; while((text[i]>0x00)) {

if(((text[i]>=0xb0) &&(text[i]<=0xf7))&&(text[i+1]>=0xa1)) {

/*国标简体(GB2312)汉字在晶联讯字库 IC 中的地址由以下公式来计算:*/ /*Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0*/ /*由于担心 8 位单片机有乘法溢出问题,所以分三部取地址*/ fontaddr = (text[i]- 0xb0)*94; fontaddr += (text[i+1]-0xa1)+846; fontaddr = (ulong)(fontaddr*32);

addrHigh = (fontaddr&0xff0000)>>16; /*地址的高 8 位,共 24 位*/ addrMid = (fontaddr&0xff00)>>8; /*地址的中 8 位,共 24 位*/ addrLow = fontaddr&0xff; /*地址的低 8 位,共 24 位*/

get_n_bytes_data_from_ROM(addrHigh,addrMid,addrLow,fontbuf,32 );/*取 32 个字节的数据,存到\

display_graphic_16x16(y,x,fontbuf);/*显示汉字到 LCD 上,y 为页地址,x 为列地址,fontbuf[]为数据*/ i+=2; x+=16; }

20


单片机显示与按键项目报告 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年电力建设安规考试卷 (基建土建) 答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: