找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4066|回復: 22
收起左側

為什么液晶處沒有顯示

  [復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次
ID:284007 發(fā)表于 2018-3-5 21:26 | 顯示全部樓層 |閱讀模式
這是僅僅有一小部分功能的計算器程序,但液晶去沒反應;求各位指出問題;


  #include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^6;
sbit wr=P2^5;
sbit len=P2^7;
uchar annum,num,date;
uchar dis[16];

void delay(uint z)
{
        uint x,y;
        for(x=z;z>0;x--)
                for(y=110;y>0;y--);
}

void  write_com(uchar com)
{
        rs=0;
        P0=com;
        delay(5);
        len=1;
        delay(5);
        len=0;
       
}

void write_date(uchar date)
{
        rs=1;
        P0=date;
        delay(5);
        len=1;
        delay(5);
        len=0;
}

void keyscan()
{
        uchar temp,key;
        P3=0xfe;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                         temp=P3;
                        switch(temp)
                        {
                                case 0xee:
                                num=0;
                                break;
                                annum++;
                                case 0xde:
                                num=1;
                                annum++;
                                break;
                                case 0xbe:
                                num=2;
                                annum++;
                                break;
                                case 0x7e:
                                num=3;
                                annum++;
                                break;
                        }
                        while(temp!=0xf0);
                        {
                                P3=temp;
                                temp=temp&0xf0;
                        }                       
                }
        }
        P3=0xfd;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(5);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xed:
                                num=4;
                                annum++;
                                break;
                                case 0xdd:
                                num=5;
                                annum++;
                                break;
                                case 0xbd:
                                num=6;
                                annum++;
                                break;
                                case 0x7d:
                                num=7;
                                annum++;
                                break;
                        }
                        while(temp!=0xf0)
                        {
                       
                                temp=P3;
                                temp=temp&0xf0;
                        }
                }
        }
        P3=0xfb;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xeb:
                                num=8;
                                annum++;
                                break;
                                case 0xdb:
                                num=9;
                                annum++;
                                break;
                                case 0xbb:
                                num=10;
                                break;
                                case 0x7b:
                                num=11;
                                break;


                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        }
                }
        }
        P3=0xf7;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xe7:
                                num=12;
                                break;
                                case 0xd7:
                                num=13;
                                case 0xb7:
                                num=14;
                                break;
                                case 0x77:
                                num=15;
                                break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp&0xf0;

                        }
                }


        }

}

uchar keysuan(uchar date)
{
          if(num==0)
                date=date+(num*annum*10);
        if(num==1)       
                date=date+(num*annum*10);
        if(num==2)
                date=date+(num*annum*10);
        if(num==3)
                date=date+(num*annum*10);
        if(num==4)
                date=date+(num*annum*10);
        if(num==4)
                date=date+(num*annum*10);
        if(num==5)
                date=date+(num*annum*10);
        if(num==6)
                date=date+(num*annum*10);
        if(num==7)
                date=date+(num*annum*10);
        if(num==8)
                date=date+(num*annum*10);
       
        if(num==9)
                {date=date+(num*annum*10);}
                return date;
          
}

void jisuan()
{
        write_com(0x80+0x40+16);
        dis[0]=date%10+0x30;
        dis[1]=date/10%10+0x30;
        dis[2]=date/100%10+0x30;
        dis[3]=date/1000%10+0x30;
        dis[4]=date/10000%10+0x30;
        dis[5]=date/100000%10+0x30;
        dis[6]=date/1000000%10+0x30;
        dis[7]=date/10000000%10+0x30;
        dis[8]=date/100000000%10+0x30;
        dis[9]=date/1000000000%10+0x30;
        dis[10]=date/10000000000%10+0x30;
}

void display()
{
  uchar i=0;
        write_com(0x80+0x50);
        while(dis[i]!='\0')
        {
                write_date(dis[i]);
                i++;
        }
        i=0;
}

void init()
{
    date=0;
        wr=0;
        write_com(0x38);
        write_com(0x0f);
        write_com(0x04);
        write_com(0x01);
}

void main()
{
        init();
        while(1)
        {
          keyscan();
          keysuan();
          jisuan();
          display();

        }

}
回復

使用道具 舉報

ID:288207 發(fā)表于 2018-3-6 15:12 | 顯示全部樓層
我是進來學習的。
回復

使用道具 舉報

ID:125150 發(fā)表于 2018-3-6 22:00 | 顯示全部樓層
你看看清屏代碼對了沒!
回復

使用道具 舉報

ID:284007 發(fā)表于 2018-3-7 08:24 來自觸屏版 | 顯示全部樓層
小狗吃大白菜 發(fā)表于 2018-3-6 22:00
你看看清屏代碼對了沒!

沒有,0x01是清屏指令
回復

使用道具 舉報

ID:284007 發(fā)表于 2018-3-7 13:46 | 顯示全部樓層
哪位大神指導一下
回復

使用道具 舉報

ID:97352 發(fā)表于 2018-3-7 14:22 | 顯示全部樓層
好像是你的
sbit wr=P2^5;
沒在使用,是不是時序不對?
回復

使用道具 舉報

ID:271398 發(fā)表于 2018-3-7 15:07 | 顯示全部樓層
檢查一下液晶的連線是否正確。
回復

使用道具 舉報

ID:287754 發(fā)表于 2018-3-7 15:33 | 顯示全部樓層
程序有錯誤嗎
回復

使用道具 舉報

ID:284007 發(fā)表于 2018-3-8 09:31 來自觸屏版 | 顯示全部樓層
fhx9999 發(fā)表于 2018-3-7 14:22
好像是你的
sbit wr=P2^5;
沒在使用,是不是時序不對?

因為只是寫所以這個口一直是設為低電平
回復

使用道具 舉報

ID:284007 發(fā)表于 2018-3-8 09:31 來自觸屏版 | 顯示全部樓層
844574875 發(fā)表于 2018-3-7 15:07
檢查一下液晶的連線是否正確。

是正確的應該是程序有問題
回復

使用道具 舉報

ID:284007 發(fā)表于 2018-3-8 09:32 來自觸屏版 | 顯示全部樓層
beha 發(fā)表于 2018-3-7 15:33
程序有錯誤嗎

我還沒看出哪錯了
回復

使用道具 舉報

ID:284007 發(fā)表于 2018-3-8 09:33 來自觸屏版 | 顯示全部樓層
fhx9999 發(fā)表于 2018-3-7 14:22
好像是你的
sbit wr=P2^5;
沒在使用,是不是時序不對?

時序沒問題
回復

使用道具 舉報

ID:213173 發(fā)表于 2018-3-8 15:50 | 顯示全部樓層
你原來的程序根本不能通過編輯,修改錯誤后得到的結果如下,這就是你想要的顯示效果?

IMG_20180308_152953_看圖王.jpg



改后的程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^6;
sbit wr=P2^5;
sbit len=P2^7;
uchar annum,num,date;
uchar dis[16];
/*******100us延時程序********/
void delay(uint x)
{
        uint a,b;
        for(a=x;a>0;a--)
                for(b=10;b>0;b--);
}
/*******1ms延時程序********/
/*
void delay(uint z)
{
        uint x,y;
        for(x=z;z>0;x--)
                for(y=110;y>0;y--);
}*/
/*******液晶寫指令程序**********/
void write_com(uchar com)
{
        len=0;
        rs=0;
        P0=com;
        delay(10);
        len=1;
        delay(10);
        len=0;        
}
/*******液晶寫數(shù)據(jù)程序********/
void write_date(uchar date)
{
        rs=1;
        P0=date;
        delay(10);
        len=1;
        delay(10);
        len=0;
}
/*******液晶初始化程序********/
void init()
{
        date=0;
        wr=0;
        write_com(0x38);
        write_com(0x01);
//        write_com(0x0c);
//        write_com(0x06);
        write_com(0x0f);
        write_com(0x04);
        write_com(0x80);
}
void keyscan()                                        //按鍵掃描程序
{
        static bit sign=0;                        //按鍵有效標志
        static uint count=0;                //消抖計數(shù)變量                       
        uchar num0=0;                                //臨時變量
        P3=0xf0;                                        //賦值P3 1111 0000
        if(P3!=0xf0)                                //檢測有按鍵按下
        {
                count++;                                //消抖計數(shù)
                if((count>=500)&&(sign==0))//100~1000,根據(jù)主循環(huán)周期調整約10~20ms
                {                       
                        sign=1;                                //按鍵有效標志置1,防止重復響應
                        num0=P3;                                //保存P3值xxxx 0000,x為0或1
                        num0|=0x0f;                        //保存num按位或0x0f值xxxx 1111
                        P3=num0;                                //賦值P3 xxxx 1111
                        num0=P3;                                //保存P3值xxxx xxxx
                        switch(num0)
                        {
                                case 0xee: num= 0;annum++; break;
                                case 0xde: num= 1;annum++; break;
                                case 0xbe: num= 2;annum++; break;
                                case 0x7e: num= 3;annum++; break;
                                case 0xed: num= 4;annum++; break;
                                case 0xdd: num= 5;annum++; break;
                                case 0xbd: num= 6;annum++; break;
                                case 0x7d: num= 7;annum++; break;
                                case 0xeb: num= 8;annum++; break;
                                case 0xdb: num= 9;annum++; break;
                                case 0xbb: num=10; break;
                                case 0x7b: num=11; break;
                                case 0xe7: num=12; break;
                                case 0xd7: num=13; break;
                                case 0xb7: num=14; break;
                                case 0x77: num=15; break;
                        }
                }
        }
        else                                                //鍵抬起
        {
                sign=0;                                //按鍵有效標志清0
                count=0;                                //消抖計數(shù)清0
        }
}

uchar keysuan(uchar date)
{
        if(num==0)
               date=date+(num*annum*10);
        if(num==1)        
               date=date+(num*annum*10);
        if(num==2)
               date=date+(num*annum*10);
        if(num==3)
               date=date+(num*annum*10);
        if(num==4)
               date=date+(num*annum*10);
        if(num==4)
               date=date+(num*annum*10);
        if(num==5)
               date=date+(num*annum*10);
        if(num==6)
               date=date+(num*annum*10);
        if(num==7)
               date=date+(num*annum*10);
        if(num==8)
               date=date+(num*annum*10);       
        if(num==9)
               date=date+(num*annum*10);
        return date;
         
}

void jisuan()
{
        write_com(0x80+0x40+16);
        dis[0]=date%10+0x30;
        dis[1]=date/10%10+0x30;
        dis[2]=date/100%10+0x30;
        dis[3]=date/1000%10+0x30;
        dis[4]=date/10000%10+0x30;
        dis[5]=date/100000%10+0x30;
        dis[6]=date/1000000%10+0x30;
        dis[7]=date/10000000%10+0x30;
        dis[8]=date/100000000%10+0x30;
        dis[9]=date/1000000000%10+0x30;
        dis[10]=date/10000000000%10+0x30;
}
void display()
{
        uchar i=0;
        write_com(0x80+0x50);
        while(dis!='\0')
        {
                write_date(dis);
                i++;
        }
        i=0;
}
void main()
{
        init();
        while(1)
        {
                keyscan();
                date=keysuan(num);
                jisuan();
                display();
        }
}

IMG_20180308_152953_看圖王.jpg
回復

使用道具 舉報

ID:287655 發(fā)表于 2018-3-8 19:48 | 顯示全部樓層
代碼應該沒毛病,只能是硬件問題了
回復

使用道具 舉報

ID:57831 發(fā)表于 2018-3-8 23:33 | 顯示全部樓層
檢查一下液晶的連線是否正確。
回復

使用道具 舉報

ID:289477 發(fā)表于 2018-3-9 03:57 | 顯示全部樓層
&#128522;&#128522;MSP430系列單片機實用C語言程序設計與MSP430單片機常用模塊與綜合系統(tǒng)實例精講等光盤資料分享,里面有很多有用的例程.


下載內容
---------------------
下載內容包括3個文件夾:“程序代碼”、“實例插圖”、“電路圖”3個文件夾。
其中各個文件夾主要有以下內容。

“程序代碼”文件夾里面的內容為各實例章的程序源代碼。
“實例插圖”文件夾里面的內容為各實例章的插圖,為bmp格式。
“實例電路圖”文件夾里面的內容為各實例章的電路圖,由Protel99軟件制成。

;----------------------
;下載內容使用說明
;----------------------

下載內容的程序需要采用C語言的編譯軟件打開閱讀,也可以使用“UltraEdit”等軟件打開閱讀或者編輯。
但是這些程序必須使用“Embedded Workbench”集成開發(fā)環(huán)境進行編譯調試。

下載內容的電路圖是用Protel99軟件畫成的,所以必須使用該軟件打
回復

使用道具 舉報

ID:213173 發(fā)表于 2018-3-9 15:22 | 顯示全部樓層
本帖最后由 wulin 于 2018-3-9 16:42 編輯
july0 發(fā)表于 2018-3-8 09:32
我還沒看出哪錯了

這么多錯誤這么看不到???

無標題.jpg 無標題1.jpg 無標題2.jpg

無標題3.jpg 無標題4.jpg 無標題5.jpg



回復

使用道具 舉報

ID:222006 發(fā)表于 2018-3-10 10:53 | 顯示全部樓層
代碼細節(jié)還有很多錯誤,仔細調試吧
回復

使用道具 舉報

ID:248050 發(fā)表于 2018-3-23 11:27 | 顯示全部樓層
首先注意焊接有沒有問題,其次看一下程序,最后注意調接在屏幕上的電阻阻值。
回復

使用道具 舉報

ID:158940 發(fā)表于 2018-3-23 16:03 來自觸屏版 | 顯示全部樓層
可能是程序錯吧
回復

使用道具 舉報

ID:296096 發(fā)表于 2018-3-23 19:36 | 顯示全部樓層
代碼粗略讀起來沒有大問題,建議再檢查一遍硬件連接與元器件
回復

使用道具 舉報

ID:295217 發(fā)表于 2018-3-23 19:40 | 顯示全部樓層
建議你買一本 郭天祥的《新概念 51單片機 C語言教程》的書來看看,附帶光盤有視頻講解
回復

使用道具 舉報

ID:296402 發(fā)表于 2018-3-24 16:35 | 顯示全部樓層
沒有文字庫
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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