📄 lcm046.c
字号:
#include <reg51.H>
/*cs=p0.7 WRPort=p0.5 data=p0.4*/
sbit CS=P0^7 ;
sbit WRPort=P0^5;
sbit DA=P0^4;
///////////////////////////////////////////////////////////
void timedelay(unsigned int time);
void WRPortcom(unsigned char *p);
void WRPortdd(unsigned char *p);
void WRPortda(unsigned char *p);
void walp(unsigned char *p);
void clearLCD();
void Set1(unsigned char wei,unsigned char n);
void SetNum(unsigned int num);
///////////////////////////////////////////////////////////
unsigned char command;
unsigned char lcdaddr;
unsigned char lcddata;
const unsigned char nums[10]={0xEB,0x60,0xAD,0x8F,0x4E,0xC7,0xE7,0x8A,0xEF,0xCF}; // 0--9 数字对应表
///////////////////////////////////////////////////////////
void main(void)
{
unsigned char *p;
p=&command;
CS=1;
WRPort=1;
DA=1;
timedelay(500);
*p=0x29; WRPortcom(p); //initialize
*p=0x18; WRPortcom(p); //rc
*p=0x01; WRPortcom(p); //sys en
*p=0x03; WRPortcom(p); //lcd on
*p=0x05; WRPortcom(p); //close WDT
clearLCD();
while(1)
{
SetNum(1234);
}
}
///////////////////////////////////////////////////////////
// 基本硬件操作 ///
///////////////////////////////////////////////////////////
void WRPortcom(unsigned char *p)
{
unsigned char i;
CS=1; timedelay(3); CS=0; timedelay(3);
WRPort=0; timedelay(3); DA=1; timedelay(3); WRPort=1; timedelay(3);
WRPort=0; timedelay(3); DA=0; timedelay(3); WRPort=1; timedelay(3);
WRPort=0; timedelay(3); DA=0; timedelay(3); WRPort=1; timedelay(3);
for(i=8;i>0;i--)
{
timedelay(3);
if(*p&0x80)
{
DA=1;timedelay(3);
}
else
{
DA=0;timedelay(3);
}
WRPort=0;timedelay(5);
WRPort=1;timedelay(5);
*p=(*p)<<1;
}
DA=0;timedelay(3);
WRPort=0;timedelay(5);
WRPort=1;timedelay(5);
CS=1;timedelay(3);
DA=1;timedelay(3);
}
///////////////////////////////////////////////////////////
void WRPortdd(unsigned char *p)
{
unsigned char i;
CS=1; timedelay(10); CS=0; timedelay(10);
WRPort=0; timedelay(3); DA=1; timedelay(3); WRPort=1; timedelay(3);
WRPort=0; timedelay(3); DA=0; timedelay(3); WRPort=1; timedelay(3);
WRPort=0; timedelay(3); DA=1; timedelay(3); WRPort=1; timedelay(3);
WRPort=0; timedelay(3); DA=0; timedelay(3); WRPort=1; timedelay(3);
for(i=5;i>0;i--)
{
if(*p&0x80)
{
DA=1;timedelay(3);
}
else
{
DA=0;timedelay(3);
}
WRPort=0;timedelay(5);
WRPort=1;timedelay(5);
*p=(*p)<<1;
}
}
///////////////////////////////////////////////////////////
void WRPortda(unsigned char *p)
{
unsigned char i;
for(i=4;i>0;i--)
{
if(*p&0x01)
{
DA=1;timedelay(3);
}
else
{
DA=0;timedelay(3);
}
WRPort=0;timedelay(5);
WRPort=1;timedelay(5);
*p=(*p)>>1;
}
}
///////////////////////////////////////////////////////////
void timedelay(unsigned int s) // s*10 (us)
{
int i,j;
for(i=0;i<10;i++)
for (j=0;j<s;j++);
}
///////////////////////////////////////////////////////////
void clearLCD() //清LCD屏
{
unsigned char i;
CS=1; timedelay(3); CS=0; timedelay(3);
lcdaddr=0x00; //地址开始
for (i=0;i<8;i++)
{
lcddata=0x00;
WRPortdd(&lcdaddr);
WRPortda(&lcddata);
WRPort=1;
DA=1;
CS=1; //写一个地址结束(一条数据4位)
timedelay(10);
lcdaddr=lcdaddr+0x08*(i+1); //清屏data
}
}
///////////////////////////////////////////////////////////
// 数据显示 //
///////////////////////////////////////////////////////////
void Set1(unsigned char wei,unsigned char n)
{
unsigned char i;
CS=1; timedelay(3);
CS=0; timedelay(3);
lcdaddr=0x00+(wei-1)*2*8; //取前5位作为A0--A4
lcddata=nums[n];
WRPortdd(&lcdaddr);
for(i=8;i>0;i--)
{
if(lcddata&0x80)
{
DA=1;timedelay(3);
}
else
{
DA=0;timedelay(3);
}
WRPort=0;timedelay(5);
WRPort=1;timedelay(5);
lcddata=(lcddata)<<1;
}
}
///////////////////////////////////////////////////////////
void SetNum(unsigned int num)
{
Set1( 1,(num/1000) );
Set1( 2,(num/100)%10 );
Set1( 3,(num/10)%10 );
Set1( 4,num%10 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -