|
找了好久不知道問題出在哪兒
有大佬懂的嗎?
#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; // 定義使能信號引腳
/******延時(shí)***********************************/
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;
}
/*************************寫數(shù)據(jù)********************/
void write_date(uchar date)
{
rs = 1; //數(shù)據(jù)
rw = 0; //寫入
en = 0;
P0 = date;
delay(5);
en = 1; //使能
delay(5);
en = 0;
}
/**********************LCD初始化***************/
void lcd1602init(void)
{
write_com(0x38); //設(shè)置8位格式,兩行
write_com(0x0c); //整體顯示,關(guān)光標(biāo)不閃爍
write_com(0x06); //設(shè)定輸入方式,增量不位移
write_com(0x01); //清除屏幕顯示
}
/*************************顯示*********************/
//在第一行顯示123abc
//調(diào)用示例: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);
}*/
|
|