单片机的驱动程序
outbyt(k); /* send byte k=0x00 to epprom */
sck=0; /* bring sck low */
cs=1; /* bring cs high */
wip_poll(); /* poll for completion of a nonvolatile write cycle */
cs=1; /* bring cs high */
return k; /* return k */
}
void wip_poll()
{
char i;
i=0;
clflag0=1;
while((clflag0!=0)&&(i!=80)) /* if WIP bit '1' or i not equal*/
单片机液晶显示驱动程序(用C语言写的)
要求是:RS232接口单片机液晶显示模块PC机上使用串口调试助手的设置如下:
串口设置:波特率9600,无奇偶校验,数据位8位,停止位1位。
发送数据时必须以$开始,无结束字符。如$1234,就可以直接发送。
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
void LCD_SFLine(void);
void LCD_SSLine(void);
void LCD_printf(char lines, char *p);
void ReadLine(char lines, char *p);
void outbyt(char k);
char inbyt(void);
{
sck=0; /* bring sck low */
cs=0; /* bring cs low */
outbyt(k); /* set write enable latch 0x06 */
sck=0; /* set write disable latch 0x04 */
cs=1; /* bring cs high */
sbit si =P1^3;
sbit so =P1^2;
sbit clflag0 =ACC^0;
void CheckBF(void);
void LCD_WtoiR(char datas);
void LCD_WtData(char datas);
void LCD_Clr(void);
void LCD_Init(void);
k=k|so; /* k or so */
/* k shift left one bit */
}
return k; /* return k */
}
/******************************************************/
void wren_cmd(char k) /* set write enable or disable latch */
}
void LCD_printf(char lines, char *p) /*数据输出*/
{
if (lines==1)
LCD_SFLine();
else
LCD_SSLine();
while(*p=='$')
{
while(*p!='\0')
{
LCD_WtData(*p);
p++;
}
}
}
void ReadLine(char lines, char *p) /*读取数据*/
LCD_WtoiR(0x0e); /* (0x0c)?是否显示光标*/
LCD_WtoiR(0x06); /* (0x07)?光标左移或右移*/
}
void LCD_SFLine() /*显示第一行*/
{
LCD_WtoiR(0x80);
}
void LCD_SSLine() /*显示第二行*/
{
LCD_WtoiR(0xc0);
SCON=0x50;
TR1=1;
ES=0;
#include <reg52.h>
#include <absacc.h>
#include <math.h>
sbit RS = P2^5;
sbit RW = P2^6;
sbit Enable = P2^7;
sbit cs =P1^0;
sbit sck =P1^1;
}
/******************************************************/
char rdsr_cmd(void) /* read status register command */
{
char k;
sck=0; /* bring sck low */
cs=0; /* bring cs low */
{
i++;
ACC=rdsr_cmd(); /* read status register */
}
/* to 80 , continus polling */
}
void wrsr_cmd() /* write status register */
{ char k;
sck=0; /* bring sck low */
{
char number,i;
if(lines==1)
{
number=0x80;
LCD_SFLine();
}
else
{
number=0xc0;
LCD_SSLine();
}
for(i=0;i<=19;i++)
{
LCD_WtoiR(number);
CheckBF();
Enable=0;
RS=1;
RW=1;
}
main()
{
char a[20];
LCD_Init();
LCD_Clr();
LCD_printf(1,"1234567"); /*读取第一行数据,在第二行输出*/
ReadLine(1,a);
LCD_printf(2,a);
wrsr_cmd();
while(1)
{
cs=0;
cs=1;
}
}
这是我的不知道对不对还需要补充什么的
char inbyt(void) /* recieves byte from epprom */
{
char i,k;
for(i=0;i<8;i++) /* use i as bit counter to eight */
{
k<<=1;
sck=1; /* bring sck high */
sck=0; /* bring sck low */
k=0x05; /* read status register command byte 0x05 */
outbyt(k); /* send k=0x05 to epprom */
k=inbyt(); /* receieve k from epprom */
sck=0; /* bring sck low */
{
RS=0;
RW=1;
Enable=0;
Enable=1;
flag=P0;
Enable=0;
}
RW=0;
}
void LCD_WtoiR(char datas) /*指令函数*/
{
CheckBF();
Enable=0;
RS=0;
Enable=1;
P0=datas;
Enable=0;
}
void LCD_WtData(char datas) /*数据写入*/
{
CheckBF();
Enable=0;
RS=1;
RW=0;
Enable=1;
P0=datas;
Enable=0;
}
void LCD_Clr() /*清零*/
{
LCD_WtoiR(1);
}
void LCD_Init() /*初始化*/
{
LCD_WtoiR(0x38); /* (0x3c)?第一行或第二行*/
{
sck=0; /* bring sck low */
si=k&0x80; /* si is always equal to k's highest bit */
sck=1; /* bring sck high */
k<<=1; /* shift data k left 1 */
}
}
/******************************************************/
回答
** 1602A液晶屏驱动程序**晶振频率:11.0592M*****************************************/#include <reg51.h>#define uchar unsigned char#define uint unsigned int sbit LCM_E=P3^5;//定义接口sbit LCM_RW=P3^6;sbit LCM_RS=P3^7; #define LCM_Data P1//数据接口void LCM_WriteData(uchar WDLCM);void LCM_WriteCommand(uchar WCLCM,BuysC);uchar LCM_ReadData(void);uchar LCM_ReadStatus(void);void LCM_Init(void