久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 為什么液晶處沒有顯示 [打印本頁]

作者: july0    時間: 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();

        }

}

作者: wayne0830    時間: 2018-3-6 15:12
我是進來學習的。
作者: 小狗吃大白菜    時間: 2018-3-6 22:00
你看看清屏代碼對了沒!
作者: july0    時間: 2018-3-7 08:24
小狗吃大白菜 發表于 2018-3-6 22:00
你看看清屏代碼對了沒!

沒有,0x01是清屏指令
作者: july0    時間: 2018-3-7 13:46
哪位大神指導一下
作者: fhx9999    時間: 2018-3-7 14:22
好像是你的
sbit wr=P2^5;
沒在使用,是不是時序不對?
作者: 844574875    時間: 2018-3-7 15:07
檢查一下液晶的連線是否正確。

作者: beha    時間: 2018-3-7 15:33
程序有錯誤嗎
作者: july0    時間: 2018-3-8 09:31
fhx9999 發表于 2018-3-7 14:22
好像是你的
sbit wr=P2^5;
沒在使用,是不是時序不對?

因為只是寫所以這個口一直是設為低電平
作者: july0    時間: 2018-3-8 09:31
844574875 發表于 2018-3-7 15:07
檢查一下液晶的連線是否正確。

是正確的應該是程序有問題
作者: july0    時間: 2018-3-8 09:32
beha 發表于 2018-3-7 15:33
程序有錯誤嗎

我還沒看出哪錯了
作者: july0    時間: 2018-3-8 09:33
fhx9999 發表于 2018-3-7 14:22
好像是你的
sbit wr=P2^5;
沒在使用,是不是時序不對?

時序沒問題
作者: wulin    時間: 2018-3-8 15:50
你原來的程序根本不能通過編輯,修改錯誤后得到的結果如下,這就是你想要的顯示效果?





改后的程序:
#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;        
}
/*******液晶寫數據程序********/
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;                //消抖計數變量                       
        uchar num0=0;                                //臨時變量
        P3=0xf0;                                        //賦值P3 1111 0000
        if(P3!=0xf0)                                //檢測有按鍵按下
        {
                count++;                                //消抖計數
                if((count>=500)&&(sign==0))//100~1000,根據主循環周期調整約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;                                //消抖計數清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 (40.95 KB, 下載次數: 65)

IMG_20180308_152953_看圖王.jpg

作者: 飛天的貓    時間: 2018-3-8 19:48
代碼應該沒毛病,只能是硬件問題了
作者: walt740    時間: 2018-3-8 23:33
檢查一下液晶的連線是否正確。
作者: woainissaazz123    時間: 2018-3-9 03:57
&#128522;&#128522;MSP430系列單片機實用C語言程序設計與MSP430單片機常用模塊與綜合系統實例精講等光盤資料分享,里面有很多有用的例程.


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

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

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

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

下載內容的電路圖是用Protel99軟件畫成的,所以必須使用該軟件打
作者: wulin    時間: 2018-3-9 15:22
本帖最后由 wulin 于 2018-3-9 16:42 編輯
july0 發表于 2018-3-8 09:32
我還沒看出哪錯了

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








作者: 闊愛的釗釗    時間: 2018-3-10 10:53
代碼細節還有很多錯誤,仔細調試吧
作者: 筆墨紙硯    時間: 2018-3-23 11:27
首先注意焊接有沒有問題,其次看一下程序,最后注意調接在屏幕上的電阻阻值。
作者: 小企鵝賣萌    時間: 2018-3-23 16:03
可能是程序錯吧
作者: 神經漫游    時間: 2018-3-23 19:36
代碼粗略讀起來沒有大問題,建議再檢查一遍硬件連接與元器件
作者: 郭沒那么簡單    時間: 2018-3-23 19:40
建議你買一本 郭天祥的《新概念 51單片機 C語言教程》的書來看看,附帶光盤有視頻講解
作者: I2C    時間: 2018-3-24 16:35
沒有文字庫




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲v日韩v综合v精品v | 91久久精品国产免费一区 | 国产精品影视在线观看 | 成人在线免费观看 | 美女黄色在线观看 | 国产精品国产精品 | 九九亚洲| 欧美一级www片免费观看 | 成人精品国产免费网站 | 国产精品久久久乱弄 | 极品粉嫩国产48尤物在线播放 | 亚洲欧美中文字幕在线观看 | 天天躁日日躁xxxxaaaa | 久久国产婷婷国产香蕉 | 国产成人精品一区二区三区网站观看 | 韩日在线视频 | 亚洲日本中文字幕在线 | 91在线影院| 国产成人综合亚洲欧美94在线 | av资源网站 | 99精品国产一区二区青青牛奶 | 亚洲毛片一区二区 | 天堂资源最新在线 | 成人精品福利 | www日日日| 久久高清 | 欧美中文字幕一区二区三区亚洲 | 国产高清一二三区 | 欧美极品视频在线观看 | 亚洲综合国产 | 欧美在线天堂 | 超碰人人91| 国产午夜精品久久久 | 超碰天天 | 欧美日韩在线精品 | 亚洲区一区二 | 91亚洲精选 | 欧美一区二区三区视频 | 亚洲视频区 | 亚洲视频国产 | 午夜精品三区 |