⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1520.c

📁 针对 hdm32gs12-b 的 C语言 单片机代码
💻 C
字号:
/******************************************************************************
文件名 :12232-2.c
模块名称:SED1520驱动12232液晶驱动
---------------------------------------------------------------
|DB0-----P0.0 | DB4-----P0.4 | RW-------P2.2 | A0--------P2.1 |
|DB1-----P0.1 | DB5-----P0.5 | E2-------P2.4 | Vo接10k电位器调整对比度 |
|DB2-----P0.2 | DB6-----P0.6 | E1-------P2.5 |
|DB3-----P0.3 | DB7-----P0.7 | RST-------P2.3|   
---------------------------------------------------------------
******************************************************************************/
#include <reg52.h>

#define  uchar  unsigned char
#define DATA P0     //数据口
sbit E1 = P2^5;
sbit E2 = P2^4;
sbit RW = P2^2;
sbit A0 = P2^1;
sbit led = P1^1;
/*--  Arial12;  此字体下对应的点阵为:宽x高=16x16   --*/
//普 兰 工 作 室
//00 01 02 03  
 
unsigned char code   ZM[]={
/*--  文字:  普  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,

/*--  文字:  兰  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x20,0x20,0x22,0x24,0x28,0x20,0x20,0x30,0x28,0x27,0x22,0x20,0x20,0x00,0x00,
0x20,0x20,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x00,

/*--  文字:  工  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,

/*--  文字:  作  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x80,0x40,0x20,0xF8,0x07,0x22,0x18,0x0C,0xFB,0x48,0x48,0x48,0x68,0x48,0x08,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x04,0x04,0x04,0x04,0x06,0x04,0x00,

/*--  文字:  室  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x10,0x2C,0x24,0xA4,0x64,0x25,0x26,0x24,0x24,0xA4,0x24,0x34,0x2C,0x04,0x00,
0x40,0x40,0x48,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x4B,0x48,0x40,0x40,0x00,


};
static  uchar code *  data pzm;  
           //静态的,指向位于code区域unchar类型的,存储于data区域的指针

#define LCD_DISPLAYON 0xaf      //af 开显示,
#define LCD_DISPLAYOFF 0xae      //ae 关显示,
#define LCD_DRIVERON 0xa5      //a5 静态显示驱动
#define LCD_DRIVEROFF 0xa4      //a4正常驱动
#define LCD_DUTY16 0xa8          //占空比1/16
#define LCD_DUTY32 0xa9          //占空比1/32
//
#define LCD_END 0xee          /*关闭"读-修改-写"模式,并把列地址指针
                              恢复到打开"读-修改-写"模式前的位置。*/

#define LCD_RESET 0xe2          /*初始化。① 设置显示初始行为第一行;
                              ②页地址设置为第三页。*/

#define LCD_RWMODE 0xe0          /*"读-修改-写"模式 。执行该指令以后,
                              每执行一次写数据,指令列地址自动加1;
                              但执行读数据指令时列地址不会改变。
                              这个状态一直持续到执行"END"指令。
                              注意:在"读-修改-写"模式下,
                              除列地址设置指令之外,其他指令照常执行。 */
#define LCD_STARTLINE0 0xc0      //设置显示起始行 可以加0-31
#define LCD_PAGE0 0xb8          //页地址设置        可以加0-3
#define LCD_COLUMNADDR0 0x00  //列地址设置     可以加0-60

#define LCD_ON() LCD_Command(LCD_DISPLAYON)
#define LCD_OFF() LCD_Command(LCD_DISPLAYOFF)
#define LCD_StaticON() LCD_Command(LCD_DRIVERON)
#define LCD_StaticOFF() LCD_Command(LCD_DRIVEROFF)
#define LCD_Select16() LCD_Command(LCD_DUTY16)
#define LCD_Select32() LCD_Command(LCD_DUTY32)
#define LCD_StartRW() LCD_Command(LCD_RWMODE)
#define LCD_EndRW() LCD_Command(LCD_END)
#define LCD_Reset() LCD_Command(LCD_RESET)
#define LCD_SetStartLine(i) LCD_Command(LCD_STARTLINE0|i)
#define LCD_SetPage(i) LCD_Command(LCD_PAGE0|i)
#define LCD_SetColumn(i) LCD_Command(LCD_COLUMNADDR0|i)

void LCD_Command(uchar nCommand)               //写命令
{                                 
   A0=0;
   E1=1; 
   E2=1; 
   DATA=nCommand;
   E1=0;
   E2=0;
}
void LCD_SetRam(bit zhucongmian,uchar ndata)    //送显示数据ndata,setMS为0主,1从
{                
      A0=1; 
      E1=!zhucongmian;
      E2=zhucongmian;  
      
      DATA=ndata;
      E1=0;
      E2=0;
}
void LCD_Init()        // LCD_Init
{ 
//   P1=0x00;
//  P2=0x00;
   LCD_OFF();               //关闭显示
    LCD_Command(LCD_RESET);  //复位
   LCD_Command(0xa0);       //列与段驱动反方向
   LCD_Command(LCD_DUTY32); //1/32
   LCD_Command(0xa4);       //关闭静态显示    打开正常驱动
   LCD_EndRW();             //关闭自动列加1
   LCD_SetStartLine(0);     //设置起始行
   LCD_SetColumn(0);        //起始列
   LCD_SetPage(0);          //起始页
   LCD_ON();                //开显示
}
void clrscr(void)    //清屏
{
  uchar i;
  uchar page;
  for(page=0;page<4;page++)
   {
    LCD_SetPage(page);
     for(i=0;i<61;i++)
       {
        LCD_SetColumn(i);
          LCD_SetRam(0,0X00);
          LCD_SetRam(1,0X00);
        } 
    }
}
drawword(uchar liedizhi,uchar layer,uchar wenzi)  //layer 值为0,2;wenzi 码表中的几个字
{
  uchar column,x;//layer 值为0,2;wenzi 码表中的几个字
   bit zhucongmian; 
   for(x=0;x<16;x++)
    {
     column=liedizhi+x;   
     if(column>60)
         {
          zhucongmian=1;
          column-=61;
         }
     else 
      zhucongmian=0;
//    LCD_SetStartLine(0);//设置起始行
     LCD_SetColumn(column);//设置起始列
     LCD_SetPage(layer);

     LCD_SetRam(zhucongmian,*(pzm+wenzi*32+x));
//    LCD_SetStartLine(0);//设置起始行
     LCD_SetColumn(column);//设置起始列
     LCD_SetPage(layer+1);
     LCD_SetRam(zhucongmian,*(pzm+wenzi*32+16+x));
   }
}
void delay1s()           // delay1s
{
  unsigned char j, k;
   for(j=0;j<150;j++)
    for(k=0;k<255;k++);
}
main()
{      
    uchar i;
    LCD_Init();  //液晶初始化
    clrscr();
    pzm=ZM;
    while(1)
    {
     for(i=0;i<31;i++)           
      {
      LCD_SetStartLine(i);      // 设置行地址自加1,文字向上滚动
   	drawword(0, 0,0);//列地址,页,文字     
      drawword(16,0,1);
      drawword(32,0,2);
      drawword(48,0,3);
      drawword(64,0,4);
      drawword(72,0,5);
        led = 1;         //灯闪烁,表示程序运行正常
        delay1s();
        led = 0;
        delay1s();
      }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -