📄 lcm.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 + -