欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2462|回復: 3
打印 上一主題 下一主題
收起左側(cè)

[求助]89C52并口12864顯示亂碼

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:73992 發(fā)表于 2018-1-5 17:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
12864B--2.0   帶字庫  7920
DBO--DB7 接 85c52  P2.0--P2.7    V0接5v。
RS接P1.2    RW接P1.3   EN接P1.4   PSB接+電源   rst接+電源,.電源電壓5V,代碼我看不懂只是改了一下管腳。現(xiàn)在顯示亂碼,
因為是初學者,想試12864好壞,然后再學程序,試了10幾天了,燒很多代碼進去都是亂碼。
在此請各位朋友,幫我斷一下原因。或者發(fā)一個簡單代碼,我試一下機。
用本論壇大神的代碼,
代碼是抄的如下:
#include<reg52.h>

#include <math.h>

void lcd_init(void);

void clr_lcd(void);

void send_com(unsigned char cmd);

void send_data(unsigned char dat);

void chek_busy(void);

void set_xy(unsigned char xpos,unsigned char ypos);

void print(unsigned char x,unsigned char y,char* str);

void printstr(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k);



unsigned char code buf[4] ={0xbb,0xb6,0xd3,0xad};//歡迎
#define DATA       P2

#define CONTROL P1

#define E    4          //并行的使能信號        sbit E   = P0^7

#define RW   3          //并行的讀寫信號         sbit RW = P0^6

#define RS   2         //并行的指令數(shù)據(jù)選擇信號 sbit RS = P0^5  

#define PSB 5         //并/串行接口選擇         sbit PSB = P0^4

#define RST 6         //復位 低電平有效         sbit RST = P0^3

#define SETB(x,y) (x|=(1<<y))

#define CLRB(x,y) (x&=(~(1<<y)))

#define CHKB(x,y) (x&(1<<y))
/********************測忙碌**********************/

//測忙碌子程序

//RS=0,RW=1,E=H,D0-D7=狀態(tài)字

/************************************************/

void chek_busy(void)

{ unsigned char temp1;//狀態(tài)信息(判斷是否忙)

   CLRB(CONTROL,RS);    // RS = 0;

   SETB(CONTROL,RW);    // RW = 1;

   SETB(CONTROL,E);    // E = 1;

   do{temp1 = DATA;DATA=0xFF;} while(temp1&0x80);

   SETB(CONTROL,E);   // E = 1;

   DATA=0xFF;

}

/********************寫命令**********************/

//寫命令子程序

//

/************************************************/

void send_com(unsigned char cmd)/*寫命令*/

{

chek_busy();

CLRB(CONTROL,RS); //RS = 0;

CLRB(CONTROL,RW); //RW = 0;

DATA = cmd;

SETB(CONTROL,E); //E = 1;

CLRB(CONTROL,E); //E = 0;

}

/********************寫數(shù)據(jù)**********************/

//寫數(shù)據(jù)子程序

//

/************************************************/

void send_data(unsigned char dat)

{

chek_busy();

SETB(CONTROL,RS); //RS = 1;

CLRB(CONTROL,RW); //RW = 0;

DATA = dat;

SETB(CONTROL,E); //E = 1;

CLRB(CONTROL,E); //E = 0;

}

/********************初始化**********************/

//復位、通訊方式選擇

/************************************************/

void lcd_init(void)

{

    SETB(CONTROL,RST);//復位RST=1

    SETB(CONTROL,PSB);       //通訊方式為并口PSB = 1

      //send_com(0x34);//34H--擴充指令操作

send_com(0x30);//功能設(shè)置,一次送8位數(shù)據(jù),基本指令集

send_com(0x0C);//0000,1100 整體顯示,游標off,游標位置off

send_com(0x01);//0000,0001 清DDRAM

send_com(0x02);//0000,0010 DDRAM地址歸位

send_com(0x80);//1000,0000 設(shè)定DDRAM 7位地址000,0000到地址計數(shù)器AC

}



/*******************************************************************/

//          設(shè)置顯示位置    xpos(1~16),tpos(1~4)

/*******************************************************************/

void set_xy(unsigned char xpos,unsigned char ypos)

{

switch(ypos)

{

   case 1:

    send_com(0X80|xpos);break;

   case 2:

    send_com(0X90|xpos);break;

   case 3:

    send_com(0X88|xpos);break;

   case 4:

    send_com(0X98|xpos);break;

   default:break;

}

}

/*******************************************************************/

//          在指定位置顯示字符串

/*******************************************************************/

void print(unsigned char x,unsigned char y,char* str)

{

    unsigned char lcd_temp;

    set_xy(x,y);

    lcd_temp=*str;

    while(lcd_temp != 0x00)

    {

        send_data(lcd_temp);

        lcd_temp=*(++str);

    }

}



/********************寫字符串******************/

//寫字符串子程序

//xpos1取0~7共八列,ypos1取0~3共四行。

/**********************************************/

    void printstr(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k)

{ unsigned char n;

     switch (ypos)

    { case 1: xpos |= 0x80;break;         //第一行

      case 2: xpos |= 0x90;break;         //第二行

      case 3: xpos |= 0x88;break;         //第三行

      case 4: xpos |= 0x98;break;         //第四行

      default: break;

     }

      send_com(xpos);                                    //此處的Xpos已轉(zhuǎn)換為LCM的顯示寄存器實際地址

      for(n=0;n < k;n++)

     {

      send_data(str[n]);//顯示漢字時注意碼值,連續(xù)兩個碼表示一個漢字

      }

   }



/********************清屏************************/

//清屏

/************************************************/

void clr_lcd(void)

{

   send_com(0x01);

   //send_com(0x34);

   //send_com(0x30);

}



/**************主函數(shù)***********************/

void main ()

{

lcd_init();     //設(shè)定液晶工作方式

printstr(1,1,buf,4);

print(5,1,"光臨");

print(0,3," SEEGU起飛空間");//  起飛  兩字是我剛剛發(fā)帖時改過的

while(1) { }

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:74784 發(fā)表于 2018-1-5 19:30 | 只看該作者
亂碼現(xiàn)象就是讀寫時序不對~~~~~~~
回復

使用道具 舉報

板凳
ID:108715 發(fā)表于 2018-1-5 20:37 | 只看該作者
LCD12864液晶顯示亂碼修復:

這是因為keil軟件的bug,需要補一個補丁。
補丁已經(jīng)放在附件里
解壓后復制里面的ccKeilVxx.exe 文件到
Keil安裝目錄的 keil\C51\BIN 路徑下
然后雙擊打開ccKeilVxx.exe,點start

如果以上還是無法解決那就是硬件問題了

keil補丁.rar

10.48 KB, 下載次數(shù): 14

回復

使用道具 舉報

地板
ID:73992 發(fā)表于 2018-1-5 21:53 | 只看該作者
我按照樓上2位的思路來調(diào)整一下,
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表