在LCD板上显示自创的汉字

    xiaoxiao2021-03-26  51

    /*-----------------------------------------------   名称:LCD1602   论坛:www.doflye.net   编写:shifang   日期:2009.5   修改:无   内容:通过标准程序静态显示字符   引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include<intrins.h> sbit RS = P2^4;   //定义端口  sbit RW = P2^5; sbit EN = P2^6; #define RS_CLR RS=0  #define RS_SET RS=1 #define RW_CLR RW=0  #define RW_SET RW=1  #define EN_CLR EN=0 #define EN_SET EN=1 #define DataPort P0 unsigned char *time = "23:58:49"; void revise_time(); /*------------------------------------------------  uS延时函数,含有输入参数 unsigned char t,无返回值  unsigned char 是定义无符号字符变量,其值的范围是  0~255 这里使用晶振12M,精确延时请使用汇编,大致延时  长度如下 T=tx2+5 uS  ------------------------------------------------*/ void DelayUs2x(unsigned char t) {     while(--t); } void delay(int n) {     int i,j; for(i = 0;i < 255;i++) for( j = 0; j < n;j++) {} } /*------------------------------------------------  mS延时函数,含有输入参数 unsigned char t,无返回值  unsigned char 是定义无符号字符变量,其值的范围是  0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) {        while(t--)  {      //大致延时1mS      DelayUs2x(245); DelayUs2x(245);  } } /*------------------------------------------------               判忙函数 ------------------------------------------------*/  /*bit LCD_Check_Busy(void)   {   DataPort= 0xFF;   RS_CLR;   RW_SET;   EN_CLR;   _nop_();   EN_SET;  return (bit)(DataPort & 0x80);  } */ /*------------------------------------------------               写入命令函数 ------------------------------------------------*/  void LCD_Write_Com(unsigned char com)   {   // while(LCD_Check_Busy()); //忙则等待  DelayMs(5);  RS_CLR;   RW_CLR;   EN_SET;   DataPort= com;   _nop_();   EN_CLR;  } /*------------------------------------------------               写入数据函数 ------------------------------------------------*/  void LCD_Write_Data(unsigned char Data)   {   //while(LCD_Check_Busy()); //忙则等待  DelayMs(5);  RS_SET;   RW_CLR;   EN_SET;   DataPort= Data;   _nop_();  EN_CLR;  } /*------------------------------------------------                 清屏函数 ------------------------------------------------*/  void LCD_Clear(void)   {   LCD_Write_Com(0x01);   DelayMs(5);  } /*------------------------------------------------               写入字符串函数 ------------------------------------------------*/  void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)   {       if (y == 0)    {      LCD_Write_Com(0x80 + x);     //表示第一行   }  else    {         LCD_Write_Com(0xC0 + x);      //表示第二行   }          while (*s)    {       LCD_Write_Data( *s);       s ++;        }  } /*------------------------------------------------               写入字符函数 ------------------------------------------------*/  void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)   {       if (y == 0)    {        LCD_Write_Com(0x80 + x);        }      else    {        LCD_Write_Com(0xC0 + x);        }          LCD_Write_Data( Data);    } /*------------------------------------------------               初始化函数 ------------------------------------------------*/  void LCD_Init(void)   {    LCD_Write_Com(0x38);    /*显示模式设置*/     DelayMs(5);     LCD_Write_Com(0x38);     DelayMs(5);     LCD_Write_Com(0x38);     DelayMs(5);     LCD_Write_Com(0x38);      LCD_Write_Com(0x08);    /*显示关闭*/     LCD_Write_Com(0x01);    /*显示清屏*/     LCD_Write_Com(0x06);    /*显示光标移动设置*/     DelayMs(5);     LCD_Write_Com(0x0C);    /*显示开及光标设置*/    }     /*------------------------------------------------                     主函数 ------------------------------------------------*/  void ren_zi() {     LCD_Write_Com(0x40); LCD_Write_Data(0x1f); LCD_Write_Com(0x41); LCD_Write_Data(0x14); LCD_Write_Com(0x42); LCD_Write_Data(0x18); LCD_Write_Com(0x43); LCD_Write_Data(0x13); LCD_Write_Com(0x44); LCD_Write_Data(0x12); LCD_Write_Com(0x45); LCD_Write_Data(0x12); LCD_Write_Com(0x46); LCD_Write_Data(0x1f); LCD_Write_Com(0x47); LCD_Write_Data(0x10); } void ren_zi1() {     LCD_Write_Com(0x48); LCD_Write_Data(0x1f); LCD_Write_Com(0x49); LCD_Write_Data(0x05); LCD_Write_Com(0x4a); LCD_Write_Data(0x03); LCD_Write_Com(0x4b); LCD_Write_Data(0x19); LCD_Write_Com(0x4c); LCD_Write_Data(0x09); LCD_Write_Com(0x4d); LCD_Write_Data(0x09); LCD_Write_Com(0x4e); LCD_Write_Data(0x1f); LCD_Write_Com(0x4f); LCD_Write_Data(0x01); }   void main() {     LCD_Init(); LCD_Clear(); // ren_zi(); while(1) {    ren_zi();    LCD_Write_Com(0x87);     LCD_Write_Data(0x00); //delay(200); ren_zi1(); LCD_Write_Com(0x88); LCD_Write_Data(0x01);  //delay(200); } }  /*void main(void)  {  unsigned char i,j;  unsigned char *p,*q;  LCD_Init();  while (1)   {   i = 2;  j = 1;  p = "This New World!";   q = "Welcome to" ; LCD_Clear();   //LCD_Write_String(2,0,"Welcome to"); LCD_Write_Char(0,1,0xb3); while (*q)  {    LCD_Write_Char(j,0,*q);    j ++;    q ++;    DelayMs(250);    }     DelayMs(250);    while (*p)  {    LCD_Write_Char(i,1,*p);    i ++;    p ++;    DelayMs(250);    }    //DelayMs(255);  delay(800);    } }*/
    转载请注明原文地址: https://ju.6miu.com/read-663974.html

    最新回复(0)