#include <reg52.h>
#include <stdarg.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define uchar unsigned char
#define schar signed char
#define uint unsigned int
#define sint signed int
#define ulong unsigned long
#define slong signed long
#define slong signed long
void LCD_INIT(void); //初始化LCD
void PutE(uchar add,uchar *theStr); //在指定位置输出字符串,如果有小数点则则显示再它前边的位置上。
void DLY5(void); //5nop延时
void LCD_WRCOM(uchar L_cmd); //写lcd控制命令的函数
void LCD_WRDD (uchar L_add); //写lcd的ram地址的函数
void LCD_WRDA (uchar L_dat); //写数据到lcd地址
void LCD_CLR (void) ; //清屏函数
void LCD_WR_CH(uchar add,uchar dat,uchar Ldot); //在指定位置显示字符
sbit LCD_CS = P1^1; //P1^5;使能、片选
sbit LCD_WR = P1^0; //P1^3;写
sbit LCD_DATA = P0^0; //P1^2;数据口
void DLY5(void){
_nop_();
_nop_();
_nop_();
_nop_();
}
/*写lcd命令子程序*/
void LCD_WRCOM(uchar L_cmd){
uchar i;
LCD_CS=1;
_nop_();
DLY5();
LCD_CS=0;
DLY5();
LCD_WR=0;
DLY5();
_nop_();
LCD_DATA=1;
DLY5();
_nop_();
LCD_WR=1;
DLY5();
_nop_();
LCD_WR=0;
_nop_();
DLY5();
LCD_DATA=0;
_nop_();
DLY5();
LCD_WR=1;
_nop_();
DLY5();
LCD_WR=0;
_nop_();
DLY5();
LCD_DATA=0;
DLY5();
_nop_();
LCD_WR=1;
DLY5();
_nop_();
CY=0;
D_BUFFER=L_cmd;
for(i=9;i>0;i--) {//LOOP = DATA 8 BIT + 1X
DLY5();
LCD_WR=0;
DLY5();
switch( i ) {
case 1:
LCD_DATA=D_BUFFER8;
break;
case 2:
LCD_DATA=D_BUFFER1;
break;
case 3:
LCD_DATA=D_BUFFER2;
break;
case 4:
LCD_DATA=D_BUFFER3;
break;
case 5:
LCD_DATA=D_BUFFER4;
break;
case 6:
LCD_DATA=D_BUFFER5;
break;
case 7:
LCD_DATA=D_BUFFER6;
break;
case 8:
LCD_DATA=D_BUFFER7;
break;
case 9:
LCD_DATA=D_BUFFER8;
break;
}
DLY5();
LCD_WR=1;
DLY5();
}
}
/*写地址的函数*/
void LCD_WRDD(uchar L_add){
uchar i;
LCD_CS=1; //data=(101)
DLY5();
LCD_CS=0;
DLY5();
LCD_WR=0;
DLY5();
LCD_DATA=1; //data=1
DLY5();
LCD_WR=1;
DLY5();
LCD_WR=0;
DLY5();
LCD_DATA=0; //data=0
DLY5();
LCD_WR=1;
DLY5();
LCD_WR=0;
DLY5();
LCD_DATA=1; //data=1
DLY5();
LCD_WR=1;
DLY5();
D_BUFFER=L_add;
for(i=6;i>0;i--){
DLY5();
LCD_WR=0;
DLY5();
switch( i ) {
case 1:
LCD_DATA=D_BUFFER1;
break;
case 2:
LCD_DATA=D_BUFFER2;
break;
case 3:
LCD_DATA=D_BUFFER3;
break;
case 4:
LCD_DATA=D_BUFFER4;
break;
case 5:
LCD_DATA=D_BUFFER5;
break;
case 6:
LCD_DATA=D_BUFFER6;
break;
}
DLY5();
LCD_WR=1;
DLY5();
}
}
/*在当前地址写数据*/
void LCD_WRDA(uchar L_dat){
uchar i;
D_BUFFER=L_dat;
for(i=4;i>0;i--){
DLY5();
LCD_WR=0;
DLY5();
switch( i ) {
case 1:
LCD_DATA=D_BUFFER4;
break;
case 2:
LCD_DATA=D_BUFFER3;
break;
case 3:
LCD_DATA=D_BUFFER2;
break;
case 4:
LCD_DATA=D_BUFFER1;
break;
}
DLY5();
LCD_WR=1;
DLY5();
}
}
//清屏函数
void LCD_CLR(void){
uchar j;
LCD_WRDD(0x00);
for (j=24;j>0;j--){
LCD_WRDA(0x00);
}
}
评论0