智能仪器设计报告——基于单片机和fpga的矩阵键盘控制系统设计(编辑修改稿)内容摘要:

fine LCD_PAGE 0xB8 //页指令 define LCD_COL 0x40 //列指令 //液晶引脚定义 sbit DI = P2^0。 //数据 /命令选择线 sbit RW = P2^1。 //读 /写控制线 sbit E = P2^2。 //使能控制线 sbit CS1 = P2^3。 //片选 1 sbit CS2 = P2^4。 //片选 2 sbit RST = P2^5。 //复位 // // LCD 忙等待 // void LCD_Busy_Wait() { do { LCD_DB_PORT = 0xFF。 //液晶端口置高电平 RW = 1。 _nop_()。 DI = 0。 //设置为读,选择状态寄存器 E = 1。 _nop_()。 E = 0。 //E 置高电平读取,随后置为低电平 } while (P0 amp。 0x80)。 } // // 向 LCD 发送命令 《智能仪器 设计》 大作业 —— 基于单片机和 FPGA的矩阵键盘控制系统设计 14 // void LCD_Write_Command( INT8U c) { LCD_Busy_Wait()。 //液晶忙等待 LCD_DB_PORT = 0xFF。 //液晶端口置高电平 RW = 0。 _nop_()。 DI = 0。 //设置为写,选择命令寄存器 LCD_DB_PORT = c。 //一字节命令放置到液晶端口 E = 1。 _nop_()。 E = 0。 //E 置高电平读取,随后置为低电平 } // // 向 LCD 发送数据 // void LCD_Write_Data(INT8U d ) { LCD_Busy_Wait()。 //液晶忙等待 LCD_DB_PORT = 0xFF。 //液晶端口置高电平 RW = 0。 _nop_()。 DI = 1。 //设置为写,选择数据寄存器 LCD_DB_PORT = d。 //一字节数据放置到液晶端口 E = 1。 _nop_()。 E = 0。 //E 置高电平读取,随后置为低电平 } // // 初始化 LCD // void LCD_Initialize() { CS1 = 1。 CS2 = 1。 //左右半屏片选 LCD_Write_Command(0x3F)。 // 显示开 LCD_Write_Command(LCD_START_ROW)。 // 设置起始行 } // // 《智能仪器 设计》 大作业 —— 基于单片机和 FPGA的矩阵键盘控制系统设计 15 // 通用显示函数 // // 从第 P 页第 L 列开始显 示 W 个字节数据 ,数据在 r 所指向的缓冲 // 每字节 8 位是垂直显示的 ,高位在下 ,低位在上 // 每个 8*128 的矩形区域为一页 // 整个 LCD 又由 64x64 的左半屏和 64x64 的右半屏构成 // void Common_Show(INT8U P,INT8U L,INT8U W,INT8U *r) { INT8U i。 //显示在左半屏还是右半屏 if( L 64) { CS1 = 1。 CS2 = 0。 LCD_Write_Command(LCD_PAGE + P)。 LCD_Write_Command(LCD_COL + L)。 //全部显示在左半屏 if( L + W 64) { for( i = 0。 i W。 i ++) LCD_Write_Data(r[i])。 } //如果越界则跨越左右半屏显示 else { //左半屏显示 for(i = 0。 i 64 L。 i ++) LCD_Write_Data(r[i])。 //右半屏显示 CS1 = 0。 CS2 = 1。 LCD_Write_Command(LCD_PAGE + P)。 LCD_Write_Command(LCD_COL)。 for( i = 64 L。 i W。 i ++) LCD_Write_Data(r[i])。 } } //全部显示在右半屏 else { CS1 = 0。 CS2 = 1。 LCD_Write_Command(LCD_PAGE + P)。 《智能仪器 设计》 大作业 —— 基于单片机和 FPGA的矩阵键盘控制系统设计 16 LCD_Write_Command(LCD_COL + L 64)。 for( i = 0。 i W。 i ++) LCD_Write_Data(r[i])。 } } // // 显示一个 8 16 点阵字符 // void Display_A_Char(INT8U P,INT8U L,INT8U *M) { Common_Show( P, L, 8, M )。 Common_Show( P + 1,L, 8, M + 8 )。 } // // 显示一串 8x16 点阵字符 // void Display_A_Char_String(INT8U P,INT8U L,INT8U C,INT8U *M) { INT8U i。 for(i = 0。 i C。 i ++) Display_A_Char( P, L + i * 8, M + i * 16)。 } // // // 名称 :LGM12864(KS0108)液晶显示程序 // // 说明 :开机时系统从 EPROM 2764 中读取画面并显示到 12864LCD // // include include include define INT8U unsigned char 《智能仪器 设计》 大作业 —— 基于单片机和 FPGA的矩阵键盘控制系统设计 17 define INT16U unsigned int define keyport P1 //12864LCD 相关函数 void LCD_Initialize()。 void Display_A_Char(INT8U,INT8U,INT8U *)。 void Display_A_Char_String(INT8U,INT8U,INT8U,INT8U *)。 //void Display_A_WORD(INT8U,INT8U,INT8U *)。 //void Display_A_WORD_String(INT8U,INT8U,INT8U,INT8U *)。 //void Display_Image(INT8U,INT8U,INT8U,INT8U,INT8U * )。 INT8U code Char_1[]={ /* 文字 : 1 */ /* 宋体 12。 此字体下对应的点阵为:宽 x高 =8x16 */ 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, }。 INT8U code Char_2[]={ /* 文字 : 2 */ /* 宋体 12。 此字体下对应的点阵为:宽 x高 =8x16 */ 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, }。 INT8U code Char_3[]={ /* 文字 : 3 */ /* 宋体 12。 此字体下对应的点阵为:宽 x高 =8x16 */ 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, }。 INT8U code Char_4[]={ /* 文字 : 4 */ /* 宋体 12。 此字体下对应的点阵为:宽 x高 =8x16 */ 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, }。 INT8U code Char_5[]={ /* 文字 : 5 */ /* 宋体 12。 此字体下对应的点阵为:宽 x高 =8x16 */ 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, }。 INT8U code Char_6[]={ /* 文字 : 6 */ /* 宋体 12。 此 字体下对应的点阵为:宽 x高 =8x16 */ 《智能仪器 设计》 大作业 —— 基于单片机和 FPGA的矩阵键盘控制系统设计 18 0x00,0xE0,0x10,0x88,0x88,0x18,0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。