找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3826|回復: 25
收起左側

求老師指點關于1602液晶具體顯示在那個地方的問題

[復制鏈接]
ID:67818 發(fā)表于 2014-11-3 11:58 | 顯示全部樓層 |閱讀模式
老師們,我想把1602的液晶行和列顯示弄成disply(0,1,'a');
就是說想顯示在屏幕上那一點就直接調用disply();
那怎么編程呢,我編的始終有錯誤求指點


回復

使用道具 舉報

ID:67818 發(fā)表于 2014-11-3 12:02 | 顯示全部樓層
我附上1602的程序假如要顯示ABCD在第一行第3位開始和EFG在第二行第4位顯示呢求大神指點
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;
sbit wr=P3^6;
sbit lcden=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;
uchar table1[]="PL-51STAR MCU";
uchar table2[]="www.torrancerestoration.com";
void delay(uint x)
{
        uint a,b;
        for(a=x;a>0;a--)
                for(b=10;b>0;b--);
}

void write_com(uchar com)         //些命令,RS=0
{
        P0=com;
           wr=0;
        rs=0;
        lcden=0;
        delay(10);
        lcden=1;
        delay(10);
        lcden=0;
        
}

void write_data(uchar dat)           //寫數(shù)據(jù),RS=1
{
        P0=dat;
        wr=0;
        rs=1;
        lcden=0;
        delay(10);
        lcden=1;
        delay(10);
        lcden=0;
        
}

void init()
{
        dula=0;
        wela=0;
        write_com(0x38);   //顯示模式設置:16×2顯示,5×7點陣,8位數(shù)據(jù)接口
        delay(20);
        write_com(0x0f);   //顯示模式設置
        delay(20);
        write_com(0x06);   //顯示模式設置:光標右移,字符不移
        delay(20);
        write_com(0x01);   //清屏幕指令,將以前的顯示內容清除
        delay(20);        
}
void main()
{
        
        init();                          //1602初始化
        
        while(1);
}
回復

使用道具 舉報

ID:67818 發(fā)表于 2014-11-3 12:04 | 顯示全部樓層
void frmxy( char x , char y) {  if(y==0)x=x|0x80;  else x=x|0xc0;  write_com(x);  write_data(led);  }
回復

使用道具 舉報

ID:68299 發(fā)表于 2014-11-3 12:45 | 顯示全部樓層
回復

使用道具 舉報

ID:67992 發(fā)表于 2014-11-3 18:12 | 顯示全部樓層
disply(char x,char y,char *p,)
回復

使用道具 舉報

ID:67818 發(fā)表于 2014-11-3 19:27 | 顯示全部樓層

        void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;
          for(i=0;i<*p;i++)
         {
          
         if(y==0)x=x|0x80;
         else x=x|0xc0;
         write_com(x);
         write_data(*p);
         x++;
         p++;
       
        }
         }
回復

使用道具 舉報

ID:67818 發(fā)表于 2014-11-3 19:35 | 顯示全部樓層
為啥我的程序能顯示字符在那一列和行
frm(0,1,xiexie,6);這樣的能顯示出來但是放進一個簡單按S2加1就錯了
disdata[0]=count/10;
frm(0,1,disdata,1);就錯了不解啊
回復

使用道具 舉報

ID:67818 發(fā)表于 2014-11-3 19:35 | 顯示全部樓層
dgahz 發(fā)表于 2014-11-3 18:12
disply(char x,char y,char *p,)

   void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;
          for(i=0;i<*p;i++)
         {
         
         if(y==0)x=x|0x80;
         else x=x|0xc0;
         write_com(x);
         write_data(*p);
         x++;
         p++;
        
        }
         }
回復

使用道具 舉報

ID:67818 發(fā)表于 2014-11-3 19:35 | 顯示全部樓層
dgahz 發(fā)表于 2014-11-3 18:12
disply(char x,char y,char *p,)

為啥我的程序能顯示字符在那一列和行
frm(0,1,xiexie,6);這樣的能顯示出來但是放進一個簡單按S2加1就錯了
disdata[0]=count/10;
frm(0,1,disdata,1);就錯了不解啊
回復

使用道具 舉報

ID:67992 發(fā)表于 2014-11-3 20:16 | 顯示全部樓層
  fujian2014 發(fā)表于 半小時前
void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;
          for(i=0;i<*p;i++)
         {
         
         if(y==0)x=x|0x80;
         else x=x|0xc0;
         write_com(x);
         write_data(*p);
         x++;
         p++;
        
        }
         }

count在函數(shù)體中沒讓它起作用

評分

參與人數(shù) 1黑幣 +50 收起 理由
huqin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:67818 發(fā)表于 2014-11-3 22:59 | 顯示全部樓層
dgahz 發(fā)表于 2014-11-3 20:16
count在函數(shù)體中沒讓它起作用

老師我想讓1602顯示動態(tài)的數(shù)據(jù)有啥方法嗎;
我不會,你最好了,能用1602舉個例子嗎
回復

使用道具 舉報

ID:67818 發(fā)表于 2014-11-3 23:01 | 顯示全部樓層
dgahz 發(fā)表于 2014-11-3 20:16
count在函數(shù)體中沒讓它起作用

1602我的程序發(fā)不過來,說要審核
回復

使用道具 舉報

ID:67992 發(fā)表于 2014-11-4 09:42 | 顯示全部樓層
本帖最后由 dgahz 于 2014-11-4 09:55 編輯

void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;
                 char disdata[]="=00" ;
                  disdata[1]=count/10+0x30;
                  disdata[2]=count%10+0x30;
                 if(y==0)x=x|0x80;
         else x=x|0xc0;
         write_com(x);
          for(;*p!='\0';p++)
         {
                         write_data(*p);
         }
          for(i=0;i<3;i++)
                 {
          write_data(disdata[ i ]);
         }
        
        
回復

使用道具 舉報

ID:67992 發(fā)表于 2014-11-4 09:59 | 顯示全部樓層
count只限于100變化內顯示
回復

使用道具 舉報

ID:67818 發(fā)表于 2014-11-5 09:17 | 顯示全部樓層
謝謝嘍
回復

使用道具 舉報

ID:71774 發(fā)表于 2015-1-7 15:30 | 顯示全部樓層
dgahz 發(fā)表于 2014-11-4 09:42
void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;

  disdata[1]=count/10+0x30;
                  disdata[2]=count%10+0x30;

我向您求教,求余后為什么都+0x30
回復

使用道具 舉報

ID:67992 發(fā)表于 2015-1-7 17:27 | 顯示全部樓層
因為0的字符碼是0x30.1是0x31,一直到9是0x39;
回復

使用道具 舉報

ID:67992 發(fā)表于 2015-1-7 17:28 | 顯示全部樓層
因為0的字符碼是0x30.1是0x31,一直到9是0x39;
回復

使用道具 舉報

ID:71774 發(fā)表于 2015-1-7 18:06 | 顯示全部樓層
dgahz 發(fā)表于 2015-1-7 17:28
因為0的字符碼是0x30.1是0x31,一直到9是0x39;

那為什么要加個0字符?請教!
回復

使用道具 舉報

ID:67992 發(fā)表于 2015-1-7 18:46 | 顯示全部樓層
十六進制格式為0x數(shù)字。
回復

使用道具 舉報

ID:67992 發(fā)表于 2015-1-7 18:50 | 顯示全部樓層
獵豹截圖20150107184815.png
回復

使用道具 舉報

ID:67992 發(fā)表于 2015-1-7 18:51 | 顯示全部樓層
百度1602字符手冊
回復

使用道具 舉報

ID:71774 發(fā)表于 2015-1-7 18:58 | 顯示全部樓層
dgahz 發(fā)表于 2015-1-7 18:46
十六進制格式為0x數(shù)字。

不明白為什么要加上這個代表0字符的十六進制數(shù)0x30?煩指導,初學。
回復

使用道具 舉報

ID:67992 發(fā)表于 2015-1-7 19:07 | 顯示全部樓層
要顯示0,輸入0x30;顯1輸0x31;2輸入0x32;3輸入0x33;9輸入0x39;
1+0x30=0x31;2+0x30=0x32;9+0x30=0x39;0+0x30=0x30
回復

使用道具 舉報

ID:67992 發(fā)表于 2015-1-7 19:20 | 顯示全部樓層
獵豹截圖20150107184815.png
回復

使用道具 舉報

ID:71774 發(fā)表于 2015-1-7 19:29 | 顯示全部樓層
dgahz 發(fā)表于 2015-1-7 18:46
十六進制格式為0x數(shù)字。

謝了!在您的指導下基本明白了,原來ASCII碼的0字符代碼是十進制的48,1字符代碼是十進制的49,2字符代碼是十進制的50......,又因為十進制的48就是十六進制的0X30,所以都應加上0X30。
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

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