12864带字库显示屏自定义字符显示CGRAM
2015-07-26 16:21
253 查看
/*****************************************************/ //描述:LCD12864的驱动 //作者:小四叶草 //时间:2015/06/30 //CGRAM 字符发生RAM,用户自定义4个16×16字符 //功能:显示自定义的字符 /*****************************************************/ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File #define LCD_DATA (*((volatile Uint16 *)0x45EF)) #define E GpioDataRegs.GPBDAT.bit.GPIO61 #define RW GpioDataRegs.GPADAT.bit.GPIO27 #define RS GpioDataRegs.GPBDAT.bit.GPIO60 #define LOW 0 #define HIGH 1 #define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H #define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置 #define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动) #define FUN_MODE 0x30 //工作模式:8位基本指令集 #define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白 #define DISPLAY_OFF 0x08 //显示关 #define CURSE_DIR 0x14 //游标向右移动:AC=AC+1 #define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH #define SET_DD_AC 0x80 #define DELAY_MS(A) DELAY_US((long double)A * 1000.0L) #define DELAY_100US(B) DELAY_US((long double)B * 100.0L) void InitXintf(void); void ConfigGpio(void); void InitLcd(void); void Read_Busy(void); void WriteCmd12864(Uint16 cmd); void WriteData12864(Uint16 dat); void DisplayDdram(uchar *hz); void DisplayChar(); void CGRAM(void); uchar A[] = "输出功率:"; uchar A_DATA[] = "123.45"; uchar B[] = "日发电量:"; uchar B_DATA[] = "123.45"; uchar C[] = "本月发电量:"; uchar C_DATA[] = "123.45"; uchar D[] = "总发电量:"; uchar D_DATA[] = "123.45"; uchar danwei[] = " kWh"; uchar danwei_kw[] = " kW"; uchar fanlong[] = {0x10,0x80,0x08,0x80,0x7E,0xFC,0x24,0x80,0x18,0xFC,0xFF,0x04,0x00,0xFC,0x3E,0x80, 0x22,0xF8,0x3E,0x80,0x22,0xF8,0x3E,0x80,0x22,0xFA,0x22,0x82,0x2A,0x82,0x24,0x7E};/*龍,16 X 16 ,逐行式,顺向(高位,低位)*/ uchar guo[] = {0x7F,0xFC,0x40,0x84,0x40,0xA4,0x40,0xA4,0x5F,0xF4,0x40,0x84,0x5E,0xA4,0x52,0xB4, 0x5E,0x64,0x40,0x44,0x46,0xD4,0x59,0x54,0x42,0x24,0x40,0x04,0x7F,0xFC,0x40,0x04};/*"國",0*//* (16 X 16 , 宋体 )*/ void main(void) { InitSysCtrl(); InitXintf(); InitXintf16Gpio(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; ConfigGpio(); InitLcd(); WriteCmd12864(CLEAR_SCREEN); DELAY_US(50); DisplayChar(); while(1) { //DisplayChar(); } } void ConfigGpio(void) { EALLOW; GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1; GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0; GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; GpioCtrlRegs.GPADIR.bit.GPIO27 = 1; EDIS; } void InitLcd(void) { DELAY_100US(5); WriteCmd12864(FUN_MODE); DELAY_US(5); WriteCmd12864(FUN_MODE); DELAY_US(5); WriteCmd12864(0x0C); DELAY_US(5); WriteCmd12864(CLEAR_SCREEN); DELAY_US(30); WriteCmd12864(AC_INIT); DELAY_US(4); } void Read_Busy() //读忙标志最高位为1,则busy,不能进行读写操作 { RS = LOW; RW = HIGH; E = HIGH; while(LCD_DATA & 0X80); E = LOW; } void WriteCmd12864(Uint16 cmd) { Read_Busy(); RS = LOW; RW = LOW;//写数据 E = HIGH; LCD_DATA = cmd; E = LOW; } void WriteData12864(Uint16 dat) { Read_Busy(); RS = HIGH; RW = LOW;//写数据 E = HIGH; LCD_DATA = dat; E = LOW; } void DisplayChar() { WriteCmd12864(0x81); DisplayDdram(A); CGRAM(); WriteCmd12864(0x90); WriteData12864(0x00); WriteData12864(0x00); WriteCmd12864(0x88); WriteData12864(0x00); WriteData12864(0x02); WriteCmd12864(0x98); WriteData12864(0x00); WriteData12864(0x04); WriteData12864(0x00); WriteData12864(0x06); } void DisplayDdram(uchar *hz) { while(*hz != '\0') { WriteData12864(*hz);//地址里面的值 hz++; } } /*====================================================================== 自定义函数:CGRAM 自定义显示字符对应地址及编码 地址 显示编码 0x40 0x0000 0x50 0x0002 0x60 0x0004 0x70 0x0006 CGRAM的地址是从0X40开始的,0x40+16 = 0x50;以后的地址就是加16得到的。 ======================================================================*/ void CGRAM() { uchar i; WriteCmd12864(0x40);//CGRAM的地址 WriteCmd12864(0x30);//基本指令 for(i=0;i<32;i++) { WriteData12864(fanlong[i]); // } WriteCmd12864(0x50); for(i=0;i<32;i++) { WriteData12864(guo[i]); // } WriteCmd12864(0x60); for(i=0;i<32;i++) { WriteData12864(guo[i]); // } WriteCmd12864(0x70); for(i=0;i<32;i++) { WriteData12864(guo[i]); // } }
相关文章推荐
- JAVA.AWT.CANVAS使用
- 互联网协议入门
- 2015杭电多校第二场
- 大型网站系统架构演化之路
- 树莓派与arduino串行通信
- Effective TCP/IP Programming读书笔记
- 浏览器兼容的问题及解决方法收集
- JS闭包
- tomcat性能优化详解
- 理解inode
- Xamrin开发安卓笔记(三)
- 并查集应用食物链poj1182
- 欢迎使用CSDN-markdown编辑器
- 【实例】javascript中使用event.target获取触发该事件标签的相关数据而不是通过document
- 12864带字库显示屏显示汉字程序
- CSS3中li元素自动横向排列、多栏div自动横向排列的简单方法
- uva1600_巡逻的机器人(状态bfs)
- python-re模块
- zoj1251
- mysql 锁