#指令系统
#代码
* 【课程19】 ****LCD12864的实验***********
*
* 【说 明】 ****仿真环境中没有做好的字库所以需要自己做汉字字库
*
* 【描 述】 ****显示"源享科技"
*
******************************************************************
基本操作:
读状态: RS=0,RW=1,EN=1
输出:D0~D7=状态字;
写指令: RS=0,RW=0,EN=下降沿脉冲
D0~D7=指令码;
读数据: RS=1,RW=1,EN=1
输出: D0~D7=数据;
写数据: RS=1,RW=1,EN=下降沿脉冲
D0~D7=数据;
*********************************************************/
#include //---------常用的两个宏定义-------------- #define uint8 unsigned char #define uint16 unsigned int //--------12864的控制引脚定义------------- sbit RS = P3^5; sbit RW = P3^6; sbit EN = P3^4; sbit CS2 = P3^0; sbit CS1 = P3^1; uint8 code yuan[]= { /*------------------------------------------------------------------------------ ; 源文件 / 文字: 源 ; 宽×高(像素) : 16×16 ------------------------------------------------------------------------------*/ 0x10,0x21,0x06,0xE0,0x00,0xFE,0x02,0xF2, 0x5A,0x56,0x52,0x52,0x52,0xF2,0x02,0x00, 0x04,0xFC,0x03,0x40,0x30,0x0F,0x20,0x11, 0x4D,0x81,0x7F,0x01,0x05,0x09,0x30,0x00 }; uint8 code xiang[]= { 0x00,0x04,0x04,0x74,0x54,0x54,0x55,0x56, 0x54,0x54,0x54,0x74,0x04,0x04,0x00,0x00, 0x08,0x08,0x09,0x09,0x09,0x29,0x49,0x89, 0x7D,0x0B,0x0B,0x09,0x08,0x08,0x08,0x00 }; uint8 code ke[]= { /*-- 文字: 科 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00, 0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00, 0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04, 0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00 }; uint8 code ji[]= { /*-- 文字: 技 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8, 0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00, 0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20, 0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00 }; //-----------函数的声明------------------ void DelayMS(uint16 dly); //----------液晶模块的声明--------------- bit BUSY(void); //测忙 void Write_cmd(uint8 cmd); //写命令 void Write_dat(uint8 dat); //写数据 //void LCD_Init(void); void Set_page(uint8 page); //设置页 void Set_Line(uint8 line); //设置起始行 void Set_Col(uint8 col); //设置列 void Set_ONOFF(uint8 swich); //1开0关 void Clear(void); //清屏 void LCD_Init(void); //液晶屏初始化 void Display(uint8 screen,uint8 page,uint8 col,uint8 *p);//显示汉字 void Select_Screen(uint8 swich);//选择液晶屏(左右) //---------Main Task--------------------- void main(void) { LCD_Init(); Display(1,0,0,yuan); //源 Display(1,2,0,xiang); //享 Display(1,4,0,ke); //科 Display(1,6,0,ji); //技 Display(2,0,0,yuan); Display(2,2,0,xiang); Display(2,4,0,ke); Display(2,6,0,ji); while(1) { } } /******************************************************** ** 名称 :void DelayMS(uint16 dly) ** 功能 :毫秒级延时(12M的晶振) ** 入口参数 :dly 用户的延时参数 ** 出口参数 :无 *********************************************************/ void DelayMS(uint16 dly) { uint16 x,y; for(x=dly;x>0;x--) for(y=124;y>0;y--); } /******************************************************** ** 名称 :bit BUSY(void) ** 功能 :检测LCD1602是否处于忙状态; ** 入口参数 :无 ** 出口参数 :bit Bit 返回1,则BUSY 返回0,则OK *********************************************************/ bit BUSY(void) { bit Bit; P0 = 0x00; RS = 0; RW = 1; EN = 1; DelayMS(1); Bit = (bit)(P0 & 0x80); //最高位为忙信号位 EN = 0; return Bit; } /******************************************************** ** 名称 :void Write_cmd(uint8 cmd) ** 功能 :写命令 ** 入口参数 :cmd 控制命令 ** 出口参数 :无 *********************************************************/ void Write_cmd(uint8 cmd) { while(BUSY()); //测忙 RS = 0; RW = 0; EN = 0; P0 = cmd; EN = 1; DelayMS(1); EN = 0; } /******************************************************** ** 名称 :void Write_dat(uint8 dat) ** 功能 :写数据 ** 入口参数 :dat 要显示的数据 ** 出口参数 :无 *********************************************************/ void Write_dat(uint8 dat) { while(BUSY()); //测忙 RS = 1; RW = 0; EN = 0; P0 = dat; EN = 1; DelayMS(1); EN = 0; } /******************************************************** ** 名称 :void LCD_Init(void) ** 功能 :液晶的初始化 ** 入口参数 :无 ** 出口参数 :无 *********************************************************/ /*void LCD_Init(void) { Write_cmd(0x34); //扩充指令操作 DelayMS(5); Write_cmd(0x30); //基本指令操作 DelayMS(5); Write_cmd(0x0C); //显示开,关光标 DelayMS(5); Write_cmd(0x01); //清除LCD的显示内容 DelayMS(5); }*/ /******************************************************** ** 名称 :void Set_page(uint8 page) ** 功能 :设置页 ** 入口参数 :uint8 page 0~7共8页 ** 出口参数 :无 *********************************************************/ void Set_page(uint8 page) { page = 0xb8|page; //页的首地址为0XB8 Write_cmd(page); } /******************************************************** ** 名称 :void Set_Line(uint8 line) ** 功能 :设置起始行 ** 入口参数 :uint8 line ** 出口参数 :无 *********************************************************/ void Set_Line(uint8 line) { line = 0xc0|line; Write_cmd(line); } /******************************************************** ** 名称 :void Set_Col(uint8 col) ** 功能 :设置列的起始位置 ** 入口参数 :uint8 col ** 出口参数 :无 *********************************************************/ void Set_Col(uint8 col) { col = col&0x3f; col = 0x40|col; Write_cmd(col); } /******************************************************** ** 名称 :void Select_Screen(uint8 swich) ** 功能 :选择屏幕---左右屏幕 ** 入口参数 :uint8 swich ** 出口参数 :无 *********************************************************/ void Select_Screen(uint8 swich) { switch(swich) { case 0: CS1 = CS2 =0; //全屏 break; case 1: CS1 = 0;CS2 = 1; //左屏 break; case 2: CS1 =1; CS2 = 0; //右屏 break; default: break; } } /******************************************************** ** 名称 :void Set_ONOFF(uint8 swich) //0或1 ** 功能 :设置显示开关 ** 入口参数 :uint8 swich 0---关 1---开 ** 出口参数 :无 *********************************************************/ void Set_ONOFF(uint8 swich) //0或1 { swich = 0x3e|swich; Write_cmd(swich); } /******************************************************** ** 名称 :void Clear(void) ** 功能 :清屏 ** 入口参数 :无 ** 出口参数 :无 *********************************************************/ void Clear(void) { uint8 i,j; for(i=0;i<8;i++) { Set_page(i); Set_Col(0); for(j=0;j<64;j++) { Write_dat(0x00); } } } /******************************************************** ** 名称 :void LCD_Init(void) ** 功能 :初始化 ** 入口参数 :无 ** 出口参数 :无 *********************************************************/ void LCD_Init(void) { while(BUSY()); //测忙 Set_ONOFF(1); Clear(); Set_Line(0); } /******************************************************** ** 名称 :void Display(uint8 screen,uint8 page,uint8 col,uint8 *p) ** 功能 :汉字的显示 ** 入口参数 :uint8 screen 选屏 page 页 col 列 *p 显示的汉字指针 ** 出口参数 :无 *********************************************************/ void Display(uint8 screen,uint8 page,uint8 col,uint8 *p) { uint8 i; Select_Screen(screen); Set_page(page); Set_Col(col); for(i=0;i<16;i++) { Write_dat(p[i]); } Set_page(page+1); Set_Col(col); for(i=0;i<16;i++) { Write_dat(p[i+16]); } }
上一篇:壹拾柒:DS1302的操作
下一篇:壹拾玖:DS18B20的温度读取
设计资源 培训 开发板 精华推荐
- MAP9000NLU220V16W,使用 MAP9000 高压交流 LED 驱动器用于照明设备的演示板
- BB-BONE-WIFI-04, BeagleBone TiWi-5E w/EXT.天线,BeagleBone 的附加板
- LT1021CIN8-5 用于超精密电流源的电压基准的典型应用
- 使用 LTC2367IDE-16、16 位、500ksps、伪差分单极 SAR ADC 的典型应用
- DC2229A-A,基于 LTC3877 双路降压控制器的演示板,具有 DCR 检测功能,6V = VIN = 14V,Vout1 是从 0.6V 到 1.23V @ 30A 的 VID Prog,Vout2 是 1.5V @ 30A
- YuzukiRuler Pro 随身Linux小尺子
- 使用 NXP Semiconductors 的 TDA8559 的参考设计
- 地方去TFGQTGFTF
- 简易STC8玩具示波器
- SiC461 4.5 至 60 V 输入、10A microBUCK DC/DC 转换器的典型应用