📄 液晶.c
字号:
/*
接线
DB0~DB7=P1
RS=P3^2
RW=P3^1
E=P3^0
*/
#include<reg51.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_()
#define CYCLE 50000
#define DB0_DB7 P1
/*"this is demo for 51 controlling 1602LCD!"的代码表*/
static const uchar code table[]={0x54,0x68,0x69,0x73,
0x20,0x69,0x73,0x20,
0x61,0x20,0x64,0x65,
0x6d,0x6f,0x20,0x66,
0x6f,0x72,0x20,0x35,
0x31,0x20,0x63,0x6f,
0x6e,0x74,0x72,0x6f,
0x6c,0x6c,0x69,0x6e,
0x67,0x20,0x31,0x36,
0x30,0x32,0x4c,0x43,
0x44,0x21};
sbit RS=P3^2;
sbit RW=P3^1;
sbit E=P3^0;
uchar Dataflag,Cmdflag;
uint counti;
/*函数列表*/
void init();
void Write(uchar tempdata);
void WriteDDR(uchar tempdata);
void CheckBusy();
void Delay(uint N);
/*主程序*/
void main(void)
{
TCON=0x01;
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
TR0=1;
IE=0x82;
init();
counti=0;
while(1)
nop;
}
/*延时子程序*/
void Delay(uint N)
{
uint i;
for(i=0;i<N;i++)
{
i=1;
}
}
/*初始化子程序*/
void init()
{
RS=0;
RW=0;
E=1;
Write(0x38);
Delay(1000);
Write(0x38);
Delay(1000);
Write(0x38);
Write(0x0C);
Write(0x01);
Write(0x0F);
Write(0x06);
Write(0x01);
}
/*写命令子程序*/
void Write(uchar tempdata)
{
DB0_DB7=tempdata;
RS=0;
RW=0;
E=0;
nop;
E=1;
nop;
CheckBusy();
}
/*写数据子程序*/
void WriteDDR(uchar tempdata)
{
DB0_DB7=tempdata;
RS=1;
nop;
RW=0;
E=0;
nop;
E=1;
nop;
CheckBusy();
}
/*判忙子程序*/
void CheckBusy()
{
uchar temp;
DB0_DB7=0xff;
RW=1;
RS=0;
E=0;
nop;
E=1;
do
{
nop;
temp=DB0_DB7;
}
while((temp&0x80)==0x80);
RW=0;
}
/*Timer0中断子程序*/
void service_int0() interrupt 1 using 2
{
static uchar s_Counter;
if(++s_Counter>=20)
{
if(counti<=14)
{
WriteDDR(table[counti]);
counti++;
}
else if(counti>14&&counti<sizeof(table))
{
Write(0x07);
WriteDDR(table[counti]);
counti++;
}
else
{
counti=0;
Write(0x01);
Write(0x06);
}
}
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -