本帖最后由 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();
}
}
|