|
找了好久不知道问题出在哪儿
有大佬懂的吗?
#include "reg51.h"
#include "type.h"
#include "1602.h"
#include "string.h"
#include "stdarg.h"
#include "stdio.h"
sbit rs = P2 ^ 7; // 定义
sbit rw = P2 ^ 6; // 定义读/写端口
sbit en = P2 ^ 5; // 定义使能信号引脚
/******延时***********************************/
void delay(uchar z)
{
uchar x, y;
for (x = z; x > 0; x--)
for (y = 110; y > 0; y--);
}
/************************写指令***********************/
void write_com(uchar com)
{
rs = 0; //指令
rw = 0; //写入
en = 0;
P0 = com;
delay(5);
en = 1; //使能
delay(5);
en = 0;
}
/*************************写数据********************/
void write_date(uchar date)
{
rs = 1; //数据
rw = 0; //写入
en = 0;
P0 = date;
delay(5);
en = 1; //使能
delay(5);
en = 0;
}
/**********************LCD初始化***************/
void lcd1602init(void)
{
write_com(0x38); //设置8位格式,两行
write_com(0x0c); //整体显示,关光标不闪烁
write_com(0x06); //设定输入方式,增量不位移
write_com(0x01); //清除屏幕显示
}
/*************************显示*********************/
//在第一行显示123abc
//调用示例:display_string(1,"123abc")
void display_string(uchar row,uchar *dat)
{
uchar i=0;
if(row==1)
write_com(0x80);
else
write_com(0xc0);
while(*dat!='\0' && i<16)
{
if(*dat == '\r' || *dat == '\n')
{
dat++;
continue;
}
i++;
write_date(*dat++);
}
}
/*************************显示*********************/
//在第二行第三格显示一个字符'c'
//display_char(2,3,'c')
//void display_char(uchar row,uchar col,uchar dat)
//{
// if(row==1)
// write_com(0x80 + col);
// else
// write_com(0xc0 + col);
// write_date(dat);
//}
/*
void display(uchar row,const char* format,...)
{
char buf[15];
va_list args;
va_start(args,format);
vsprintf(buf,format,args);
va_end(args);
display_string(row,(uchar *)buf);
}*/
|
|