//文件名: LCD.h (LCD头文件) *
//-------------------------------------------------------------------------*
#include "C8051F340.h"
#include
#define uint unsigned int
#define uchar unsigned char
sbit rw = P2^1; //H=read; L=write;
//sbit e1 = P2^2; //up input enable;
sbit e2 = P2^2; //down input enable;
sbit rs = P2^0; //H=data; L=command;
//sbit rst= P3^0; //Reset Signal 低电平有效
void init_lcd ();
void clrram ();
void string_disp (uchar up,uchar down,uchar addr,uchar length,uchar code *pp); //显示字符串
void number_disp (uchar up,uchar down,uchar addr,uchar length,uchar number1,uchar number2); //显示数字
//up:上半屏 down:下半屏
//up为1,控制上半屏,down为1,控制下半屏
uchar Math_Subwith(uchar dat) //线序反转
{
uchar i,temp;
temp = 0x00;
for(i=0;i<8;i++)
{
temp >>= 1;
if((dat<
{
temp |= 0x80;
}
else
{
temp &= 0x7F;
}
}
return temp;
}
//*******************************
//判忙
//*******************************
void chk_busy (uchar up,uchar down)
{
if(up==1)
{
P1 = Math_Subwith(0xff);
rs=0;
rw=1;
//e1=1;
P4 = P4|0x01;
while(P1 & 0x01);
//e1=0;
_nop_();_nop_();_nop_();_nop_();
P4 = P4&0xfe;
}
if(down==1)
{
P1 =Math_Subwith(0xff);
rs=0;
rw=1;
e2=1;
while(P1& 0x01);
_nop_();_nop_();_nop_();_nop_();
e2=0;
}
}
//********************************************
//写命令
//********************************************
void send_c (uchar up,uchar down,uchar comm)
{
chk_busy (up,down);
rs=0; //command
rw=0; //write
if(up==1)
{
P1 = Math_Subwith(comm); //output comm
//e1=1;
P4 = P4|0x01;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//e1=0;
P4 = P4&0xfe;
}
if(down==1)
{
P1 = Math_Subwith(comm); //output comm
e2=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
e2=0;
}
}[page]
//********************************************
//写数据
//********************************************
void send_d (uchar up,uchar down,uchar dat)
{
chk_busy (up,down);
rs=1; //data
rw=0; //write
if(up==1)
{
P1 = Math_Subwith(dat); //output data
//e1=1;
P4 = P4|0x01;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//e1=0;
P4 = P4&0xfe;
}
if(down==1)
{
P1 = Math_Subwith(dat); //output data
e2=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
e2=0;
}
}
/*------------------初始化-----------------*/
void init_lcd (void)
{
send_c (1,1,0x30); /*30---基本指令动作*/
send_c (1,1,0x01); /*清屏,地址指针指向00H*/
send_c (1,1,0x06); /*光标的移动方向*/
send_c (1,1,0x0c); /*开显示,关游标*/
}
/*---------------显示汉字或字符----------------*/
/*void chn_disp (uchar code *chn)
{
uchar i;
send_c (1,1,0x30); //第一行
send_c (1,0,0x80);
for (i=0;i<24;i++)
send_d (1,0,chn[i]);
send_c (1,0,0x90); //第二行
for (i=0;i<24;i++)
send_d (1,0,chn[24+i]);
send_c (0,1,0x80); //第三行
for (i=0;i<24;i++)
send_d (0,1,chn[48+i]);
send_c (0,1,0x90); //第四行
for (i=0;i<24;i++)
send_d (0,1,chn[72+i]);
}*/
/*---------------任意位置显示汉字或字符----------------*/
void string_disp (uchar up,uchar down,uchar addr,uchar length,uchar code *pp)//地址,长度,数据
{
uchar i;
send_c (1,1,0x30);
send_c (up,down,addr); //第一行
for (i=0;i
}
void number_disp (uchar up,uchar down,uchar addr,uchar length,uchar number1,uchar number2)//地址,长度,数据
{
uchar i;
send_c (1,1,0x30);
send_c (up,down,addr); //第一行
for (i=0;i
for(i=1;i<(length+1);i++)
send_d (up,down,number2);
}
/*--------------清DDRAM------------------*/
void clrram (void)
{
send_c (1,1,0x30);
send_c (1,1,0x01);
}
上一篇:基于C8051F的DS1302程序
下一篇:c8051f单片机ad采样程序
推荐阅读最新更新时间:2024-03-16 14:02