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

📄 lcm.c

📁 lcm1602的驱动程序
💻 C
字号:
#include "reg51.h"

 #define uchar unsigned char
 #define uint unsigned int
 
 //sbit dula = P2^6;
// sbit wela = P2^7;
 //SCM12864-05端口定义
 #define LCD_DATA P0 //数据口
 sbit RS = P2^5; //并行的指令/数据选择信号, H数据, L命令
 sbit RW = P2^4; //并行读写选择信号, H读, L写
 sbit E = P2^3; //并行使能端, H有效, L无效
 sbit PSB = P3^7; //并/串接口选择, H并,L串
 sbit dula = P3^3; //复位, L有效
 
  uchar code datas1[] = {"黄河集团"};
unsigned char code nBitmapDot[] =                  // 数据表
{
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
      0xFF,0xF0,0x13,0xFC,0x08,0x04,0x20,0x42,
      0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x08,
      0xA1,0xFF,0xC4,0x20,0x4F,0x80,0x00,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x03,0xF8,0x00,0x1F,
      0xFD,0xE8,0x80,0x00,0xFF,0xFF,0xFF,0xFF,
      0xF0,0x12,0xA8,0x7F,0x0A,0x20,0xAF,0x80,
      0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x0B,0xF8,
      0x41,0x0A,0x20,0xA8,0x80,0x00,0xFF,0xFF,
      0xFF,0xFF,0xF0,0x08,0x01,0xFF,0xCA,0x20,
      0xAF,0x80,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,
      0x09,0xF9,0x00,0x52,0xFC,0xAA,0x40,0x00,
      0xFF,0xFF,0xFF,0xFF,0xF0,0x18,0x00,0x3E,
      0x5A,0x84,0xAA,0x80,0x00,0xFF,0xFF,0xFF,
      0xFF,0xF0,0x0B,0xFC,0x22,0x44,0x84,0x49,
      0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x09,
      0x28,0x42,0x4A,0x84,0xAA,0x80,0x00,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x0A,0x65,0x83,0xD0,
      0xFD,0x0C,0x40,0x00,0xFF,0xFF,0xFF,0xFF,
      0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
      0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,
      0x0F,0xF9,0x01,0x00,0x80,0x00,0x00,0x00,
      0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x80,0x81,
      0x0F,0xF8,0x60,0x00,0x00,0xFF,0xFF,0xFF,
      0xFF,0xF0,0x07,0xF0,0xBF,0xC0,0x80,0xF0,
      0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x01,
      0x00,0x01,0x04,0x90,0xF0,0x00,0x00,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x1F,0xFD,0xD1,0x02,
      0xA0,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
      0xF0,0x02,0x00,0x49,0x1F,0xFC,0x60,0x00,
      0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x07,0xF0,
      0x49,0x01,0xC0,0x60,0x00,0x00,0xFF,0xFF,
      0xFF,0xFF,0xF0,0x0A,0x10,0x41,0x02,0xA0,
      0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,
      0x13,0xF0,0x47,0x04,0x90,0x60,0x00,0x00,
      0xFF,0xFF,0xFF,0xFF,0xF0,0x02,0x10,0xA0,
      0x18,0x8C,0x60,0x00,0x00,0xFF,0xFF,0xFF,
      0xFF,0xF0,0x03,0xF1,0x1F,0xC0,0x80,0x00,
      0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
      0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x0E,
      0x7F,0xE0,0x00,0x00,0x00,0x00,0xFF,0xFF,
      0xFF,0xFF,0xF0,0x00,0x11,0x84,0x1B,0xC0,
      0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,
      0x00,0x20,0x08,0x04,0x20,0x00,0x00,0x00,
      0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x40,0xC3,
      0x08,0x20,0x00,0x00,0x00,0xFF,0xFF,0xFF,
      0xFF,0xF0,0x00,0x81,0x24,0xA0,0x20,0x00,
      0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,
      0x84,0x00,0x20,0x10,0x00,0x00,0x00,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x01,0x04,0x00,0x10,
      0x10,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
      0xF0,0x02,0x18,0xC1,0x90,0x10,0x00,0x00,
      0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x02,0x29,
      0x22,0x48,0x10,0x00,0x00,0x00,0xFF,0xFF,
      0xFF,0xFF,0xF0,0x04,0xD2,0x14,0x26,0x08,
      0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,
      0x07,0x22,0x74,0xE1,0xC8,0x00,0x00,0x00,
      0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x41,0x62,
      0xC0,0xB8,0x00,0x00,0x00,0xFF,0xFF,0xFF,
      0xFF,0xF0,0x00,0x80,0xC1,0x80,0x40,0x00,
      0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,
      0x86,0x38,0x00,0x40,0x00,0x00,0x00,0xFF,
      0xFF,0xFF,0xFF,0xF0,0x01,0x09,0xC3,0x88,
      0x20,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
      0xF0,0x01,0x10,0x3C,0x50,0x20,0x00,0x00,
      0x00,0xFF,0xFF,0xFF,0xFF,0xF0
};
  uchar code datas3[] = {"黄河电器制造公司"};
  uchar code datas4[] = {"版本:HHDQ-99"};
 
//延时约2us
void delayUs()
 {unsigned char y=2;
    while(y)
	  {y--;}
 }
 //延时 a * 1ms
 void delayMs(uint a)
  {
     uint i, j;
     for(i = a; i > 0; i--)
         for(j = 100; j > 0; j--);
 }
  //延时 a * 1ms
 void ddelayMs(uint a)
  {
     uint i, j;
     for(i = a; i > 0; i--)
         for(j = 1000; j > 0; j--);
 }
 
 //检测LCD是否处于忙状态, 若忙返回1, 空闲返回0
unsigned char checkBusy()
  {
 unsigned  char busy;
     RS = 0;
     RW = 1;
     E = 1;
  delayUs();
     busy = LCD_DATA&0x80;
     E = 0;
     return busy;
 }
 
 //等待LCD到空闲
 void wait()
  {
     while(checkBusy());
 }
 
 //写命令
 void writeCmd(uchar cmd)
  {
     wait();
     RS = 0;
     RW = 0;
     E = 0;
    delayUs();
     LCD_DATA = cmd;
    delayUs();
     E = 1;
    delayUs();
     E = 0;
 }
 
 //写数据
 void writeData(uchar dat)
  {
     wait();
     RS = 1;
     RW = 0;
     E = 0;
    delayUs();
     LCD_DATA = dat;
     delayUs();
     E = 1;
    delayUs();
     E = 0;
	//ddelayMs(20);
 }
 
 //初始化LCD
 void init()
  {
     PSB = 1; //并口方式
     writeCmd(0x30); //基本指令, 扩充指令为34H
     delayMs(10);
     writeCmd(0x0e); //显示开, 关光标
     delayMs(10);
     writeCmd(0x03);
     delayMs(10);
     writeCmd(0x48);
     delayMs(10);
     writeCmd(0x01); //清屏
     delayMs(10);
 }
 
 void setPosition(uchar x, uchar y)
  {
     uchar p;
     switch(x)
      {
         case 0: p = 0x80; break; //第一行开始地址
         case 1: p = 0x90; break; //第二行
         case 2: p = 0x88; break; //第三行
         case 3: p = 0x98; break; //第四行
     }
     p += y;
     writeCmd(p);
 }
 
 void writeString(uchar * str)
  {
     uchar i = 0;
     while(str[i] != '\0')
      {
         writeData(str[i++]);
		//	 ddelayMs(50);
     }
 }
 
  /***************************LCD12864***************************************/
 
 void main()
  {
     //先关闭数码管, 使两个锁存器锁存, 因开了数码管, USB电压驱动不够, 将无法使LCD正常工作
     //dula = wela = 0;
     init();
  // while(1){
   setPosition(0, 2);
     writeString(datas1);
     //ddelayMs(100);
     setPosition(1, 0);
     writeString(nBitmapDot);
     //ddelayMs(100);
     setPosition(2, 0);
     writeString(datas3);
     //ddelayMs(100);
     setPosition(3, 0);
     writeString(datas4);
	 while(1);
	 // ddelayMs(100);
    // writeCmd(0x01);
	 // ddelayMs(100);
     //}
  }

⌨️ 快捷键说明

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