本帖最后由 835290448 于 2018-6-12 21:07 编辑
如图,出现这种乱码怎么破
#include "reg52.h" //包含头文件
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^5; //命令/数据选择
sbit RW=P2^4; //读写口
sbit E=P2^3; //锁存控制
sbit RES = P2^0; //复位
sbit PSB = P2^2; //串并选择
extern uchar disp[14];
/******************************************************************************/
//图片数字方体
/******************************************************************************/
uchar code tab[12][64]={
{// 图片数字0
0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x40,0x02,0x00,0x00,
0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},
{// 图片数字1
0x00,0x00,0x00,0x20,0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,
0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x20,
0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,
0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00},
{// 图片数字2
0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,
0x5F,0xF8,0x60,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
0x70,0x00,0x70,0x00,0x70,0x00,0x6F,0xF8,0x5F,0xFC,0x3F,0xFE,0x00,0x00,0x00,0x00},
{// 图片数字3
0x00,0x00,0x7F,0xFC,0x3F,0xFA,0x1F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,
0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x1F,0xF6,0x3F,0xFA,0x7F,0xFC,0x00,0x00,0x00,0x00},
{// 图片数字4
0x00,0x00,0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00},
{// 图片数字5
0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,
0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x0F,0xF6,0x1F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},
{// 图片数字6
0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,
0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},
{// 图片数字7
0x00,0x00,0x7F,0xFC,0x3F,0xFA,0x1F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,
0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00},
{// 图片数字8
0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},
{// 图片数字9
0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
0x00,0x0E,0x00,0x0E,0x00,0x0E,0x1F,0xF6,0x3F,0xFA,0x7F,0xFC,0x00,0x00,0x00,0x00},
{// 图片":"
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{// 图片" "
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
};
//**************************************************************************************************
//延时函数
//**************************************************************************************************
void delay(uint time) //int型数据为16位,所以最大值为65535
{
uint i,j; //定义变量i,j,用于循环语句
for(i=0;i<time;i++) //for循环,循环50*time次
for(j=0;j<100;j++); //for循环,循环50次
}
//**************************************************************************************************
//查忙
//**************************************************************************************************
void checkbusy()
{
RS=0; //命令/数据选择,为0时选择命令
RW=1; //读/写选择,为1时选择读
E=1; //使能
while((P0&0x80)==0x80); //查忙标志位,等待标志位为0,即表示写入完毕
E=0; //关闭读写
}
//**************************************************************************************************
//向LCD写一命令
//**************************************************************************************************
void wcode(uchar cmdcode)
{
checkbusy(); //查忙
RS=0; //命令/数据选择,为0时选择命令
RW=0; //读/写选择,为0时选择写
E=1; //使能
P0=cmdcode; //送入命令
delay(20); //等待写入
E=0; //关闭读写
}
//**************************************************************************************************
//向LCD写一数据
//**************************************************************************************************
void wdata(uchar dispdata)
{
checkbusy(); //查忙
RS=1; //命令/数据选择,为1时选择数据
RW=0; //读/写选择,为0时选择写
E=1; //使能
P0=dispdata; //送入数据
delay(20); //等待写入
E=0; //关闭读写
}
//**************************************************************************************************
//LCD 初始化
//**************************************************************************************************
void InitLCD()
{
PSB=1; //设置为8BIT并口工作模式
RES=0; //复位
delay(10); //延时
RES=1; //关复位
wcode(0x30); //选择基本指令集
wcode(0x0c); //开显示(无游标、不反白)
wcode(0x01); //清除显示,并且设定地址指针为00H
wcode(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
wcode(0x01); //清屏
}
//**************************************************************************************************
//任意位置显示字符串
//**************************************************************************************************
/*void dis(uchar x,uchar y,uchar code *s)
{ //x为横坐标,y位纵坐标,*s表示指针,为数据的首地址
switch(y) //选择纵坐标
{
case 0: wcode(0x80+x);break; //第1行
case 1: wcode(0x90+x);break; //第2行
case 2: wcode(0x88+x);break; //第3行
case 3: wcode(0x98+x);break; //第4行
default:break;
}
while(*s>0) //写入数据,直到数据为空
{
wdata(*s); //写数据
delay(10); //等待写入
s++; //下一字符
}
}*/
//************************************************************************************
//功能:大数字(图片)
//************************************************************************************
void shijianshuzi(uchar add,uchar bata)
{
uchar i,j=0;
wcode(0x36); //开启拓展指令集
for(i=0;i<16;i++)
{
wcode(0x90+i);
wcode(0x80+add);
wdata(tab[bata][j++]);
wdata(tab[bata][j++]);
}
for(i=0;i<16;i++)
{
wcode(0x80+i);
wcode(0x88+add);
wdata(tab[bata][j++]);
wdata(tab[bata][j++]);
}
wcode(0x30); //恢复基本指令集
}
//************************************************************************************
//功能:LCD显示第一行
//************************************************************************************
/*void xian1()
{
wcode(0x80); //设置第一行显示地址
wdata('2');
wdata('0'); //显示20
wdata(disp[13]); //显示年
wdata(disp[12]);
wdata('-'); //显示"-"
wdata(disp[9]); //显示月
wdata(disp[8]); //显示月
wdata('-');
wdata(disp[7]); //显示日
wdata(disp[6]); //显示日
switch(disp[10]) //显示星期
{
case 0x31:dis(6,0,"周一"); break;
case 0x32:dis(6,0,"周二"); break;
case 0x33:dis(6,0,"周三"); break;
case 0x34:dis(6,0,"周四"); break;
case 0x35:dis(6,0,"周五"); break;
case 0x36:dis(6,0,"周六"); break;
case 0x37:dis(6,0,"周日"); break;
default:break;
}
}*/
//************************************************************************************
//功能:LCD显示第二行
//************************************************************************************
void xian2()
{
shijianshuzi(0,1); //时十位
shijianshuzi(1,8); //时个位
shijianshuzi(2,10);
shijianshuzi(3,3); //分十位
shijianshuzi(4,3); //分个位
shijianshuzi(5,10);
shijianshuzi(6,4); //秒十位
shijianshuzi(7,4); //秒个位
}
void main()
{
InitLCD(); //初始化液晶
while(1) //进入死循环,防止看门狗复位
{
xian2();
}
}
|