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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2968|回復(fù): 9
收起左側(cè)

1602液晶疑難雜癥

[復(fù)制鏈接]
ID:65751 發(fā)表于 2014-9-16 17:31 | 顯示全部樓層 |閱讀模式
本帖最后由 codenew 于 2014-9-16 20:46 編輯

先附上程序:
#include<reg51.h>   
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned char uint;
unsigned char code table[]= {"Temp wireless   "};
unsigned char code table1[]={"Temp:           "};
unsigned char code shuzi[]={"123456789ABCDEFG"};

unsigned char num;
sbit BEEP=P3^6;         //蜂鳴器定義引腳IO口

void delays(uint x) //毫秒級(jí)延時(shí)函數(shù)
{
  uint i,j;
  for(i=x;i>0;i--)
     for(j=110;j>0;j--);
}
/*******************************************************************************
以下是對(duì)液晶模塊的操作程序
*******************************************************************************/
/***********1602液晶顯示部分子程序****************/
sbit rs=P3^3;//LCD數(shù)據(jù)/命令選擇端(H/L)
sbit rw=P3^4;//LCD讀/寫選擇端(H/L)
sbit en=P3^5;//LCD使能控制
void ready()
{
        P0=0xff;
        rs=0;  //RS(H/L),低電平選擇命令
        rw=1;  //RW(H/L),讀操作
        en=1;
        while(P0&0x80); //當(dāng)為0時(shí)表示不忙,退出循環(huán)。
        en=0;
}
void write_com(uchar com)
{
        ready();
        rs=0;//命令
        rw=0;
        P0=com;
        en=1;//ready()執(zhí)行完后,en0。形成高脈沖,表示可對(duì)液晶讀寫。
        en=0;
}
void write_date(uchar date)
{
        ready();
        rs=1;//數(shù)據(jù)
        rw=0;
        P0=date;
        en=1;//ready()執(zhí)行完后,en0。形成高脈沖,表示可對(duì)液晶讀寫。
        en=0;
}
void init1602()                         //上電后液晶顯示初始化函數(shù)
{
        write_com(0x38);        //設(shè)置工作方式
        write_com(0x0c);        //設(shè)置光標(biāo)
        write_com(0x06);        //設(shè)置輸入方式
        write_com(0x01);        //清屏
        write_com(0x80);
        for(num=0;num<16;num++)
        {
           write_date(table[num]);
        }
        write_com(0x80+0x40);
        for(num=0;num<16;num++)
        {
           write_date(table1[num]);
        }
}

/**************************************************
函數(shù)功能:主函數(shù)
***************************************************/
void main(void)
{         
          BEEP=1;                //禁止蜂鳴器
          en=0;
          P0=0xff;

        write_com(0x38);        //設(shè)置工作方式
        write_com(0x0c);        //設(shè)置光標(biāo)
        write_com(0x06);        //設(shè)置輸入方式
        write_com(0x01);        //清屏
        write_com(0x80);
          for(num=0;num<16;num++)
        {
           write_date(shuzi[num]);
        }
        while(1);
}        

評(píng)分

參與人數(shù) 2黑幣 +60 收起 理由
YJGG + 10 贊一個(gè)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:65751 發(fā)表于 2014-9-16 17:33 | 顯示全部樓層
本帖最后由 codenew 于 2014-9-16 17:36 編輯

1.刷芯片,上電運(yùn)行,第一行全部顯示小方塊,不正常。如圖所示。
2.刪除for(num=0;num<16;num++)
        {
           write_date(shuzi[num]);
        }
改成下面的:
        write_date('1');
        write_date('2');
        write_date('3');
        write_date('4');
        write_date('5');
當(dāng)然while(1);不能刪除,上電運(yùn)行,第一行還是全部顯示小方塊。
再刪除write_date('5');,即保留        
    write_date('1');
        write_date('2');
        write_date('3');
        write_date('4');
再刷芯片,上電運(yùn)行,可正常顯示1234。
3.當(dāng)刷芯片第一次是刷for語句,去掉主函數(shù)P0=0xff;,再把for語句換成
    write_date('1');
        write_date('2');
        write_date('3');
        write_date('4');
        write_date('5');
編譯再刷芯片,上電運(yùn)行,居然能顯示12345。

小方塊

小方塊
回復(fù)

使用道具 舉報(bào)

ID:65751 發(fā)表于 2014-9-16 19:54 | 顯示全部樓層
本帖最后由 codenew 于 2014-10-3 16:27 編輯

     把數(shù)組的G去掉,即如下:
unsigned char code shuzi[]={"123456789ABCDEF"};
     在主函數(shù)中照樣用:
     for(num=0;num<16;num++)
     {
     write_date(shuzi[num]);
     }
     while(1);
     刷芯片,上電運(yùn)行,顯示123456789ABCDEF正常,但最后一位亂碼,如圖所示。    最后一位亂碼屬正常,因?yàn)閟hizi[15]沒有賦值。


j16.jpg
回復(fù)

使用道具 舉報(bào)

ID:65751 發(fā)表于 2014-9-16 20:28 | 顯示全部樓層
本帖最后由 codenew 于 2014-9-16 20:44 編輯

       一開始時(shí),編譯提示*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS兩個(gè)警告,主要是有兩函數(shù)沒有被調(diào)用。這兩個(gè)函數(shù)是void delays(uint x)和void init1602()。
        我把void delays(uint x)和void init1602()這兩個(gè)函數(shù)去掉,重新編譯,提示0錯(cuò)誤,0警告了。重新刷芯片,上電運(yùn)行,可正常顯示123456789ABCDEFG這十六個(gè)字符了。我不明白,為什么保留上面哪兩個(gè)函數(shù)就顯示不正常的?照理沒調(diào)用應(yīng)不影響的。
         正常顯示123456789ABCDEFG的程序如下:
#include<reg51.h>   
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned char uint;
unsigned char code table[]= {"Temp wireless   "};
unsigned char code table1[]={"Temp:           "};
unsigned char code shuzi[]={"123456789ABCDEFG"};

unsigned char num;
sbit BEEP=P3^6;         //蜂鳴器定義引腳IO口
sbit rs=P3^3;//LCD數(shù)據(jù)/命令選擇端(H/L)
sbit rw=P3^4;//LCD讀/寫選擇端(H/L)
sbit en=P3^5;//LCD使能控制

/*******************************************************************************
以下是對(duì)液晶模塊的操作程序
*******************************************************************************/
/***********1602液晶顯示部分子程序****************/
void ready()
{
        P0=0xff;
        rs=0;  //RS(H/L),低電平選擇命令
        rw=1;  //RW(H/L),讀操作
        en=1;
        while(P0&0x80);  //當(dāng)為0時(shí)表示不忙,退出循環(huán)。
        en=0;
}
void write_com(uchar com)
{
        ready();
        rs=0;//命令
        rw=0;
        P0=com;
        en=1;//ready()執(zhí)行完后,en0。形成高脈沖,表示可對(duì)液晶讀寫。
        en=0;
}
void write_date(uchar date)
{
        ready();
        rs=1;//數(shù)據(jù)
        rw=0;
        P0=date;
        en=1;//ready()執(zhí)行完后,en0。形成高脈沖,表示可對(duì)液晶讀寫。
        en=0;
}

/**************************************************
函數(shù)功能:主函數(shù)
***************************************************/
void main(void)
{         
          BEEP=1;                //禁止蜂鳴器
          en=0;
          P0=0xff;

        write_com(0x38);        //設(shè)置工作方式
        write_com(0x0c);        //設(shè)置光標(biāo)
        write_com(0x06);        //設(shè)置輸入方式
        write_com(0x01);        //清屏
        write_com(0x80);
          for(num=0;num<16;num++)
        {
           write_date(shuzi[num]);
        }
        while(1);
}        
回復(fù)

使用道具 舉報(bào)

ID:58502 發(fā)表于 2014-9-16 22:53 | 顯示全部樓層

回帖獎(jiǎng)勵(lì) +5

我先拿你最原先的程序調(diào)試,發(fā)現(xiàn)有2個(gè)函數(shù)未被調(diào)用,一個(gè)延時(shí)函數(shù),一個(gè)1602初始化,改了之后正常顯示
           #include<reg51.h>   
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned char uint;
unsigned char code table[]= {"Temp wireless   "};
unsigned char code table1[]={"Temp:           "};
unsigned char code shuzi[]={"123456789ABCDEFG"};

unsigned char num;
sbit BEEP=P3^6;         //蜂鳴器定義引腳IO口

/*void delays(uint x) //毫秒級(jí)延時(shí)函數(shù)
{
  uint i,j;
  for(i=x;i>0;i--)
     for(j=110;j>0;j--);
}          */
/*******************************************************************************
以下是對(duì)液晶模塊的操作程序
*******************************************************************************/
/***********1602液晶顯示部分子程序****************/
sbit rs=P2^6;//LCD數(shù)據(jù)/命令選擇端(H/L)
sbit rw=P2^5;//LCD讀/寫選擇端(H/L)
sbit en=P2^7;//LCD使能控制
void ready()
{
        P0=0xff;
        rs=0;  //RS(H/L),低電平選擇命令
        rw=1;  //RW(H/L),讀操作
        en=1;
        while(P0&0x80); //當(dāng)為0時(shí)表示不忙,退出循環(huán)。
        en=0;
}
void write_com(uchar com)
{
        ready();
        rs=0;//命令
        rw=0;
        P0=com;
        en=1;//ready()執(zhí)行完后,en為0。形成高脈沖,表示可對(duì)液晶讀寫。
        en=0;
}
void write_date(uchar date)
{
        ready();
        rs=1;//數(shù)據(jù)
        rw=0;
        P0=date;
        en=1;//ready()執(zhí)行完后,en為0。形成高脈沖,表示可對(duì)液晶讀寫。
        en=0;
}
void init1602()                         //上電后液晶顯示初始化函數(shù)
{
        write_com(0x38);        //設(shè)置工作方式
        write_com(0x0c);        //設(shè)置光標(biāo)
        write_com(0x06);        //設(shè)置輸入方式
        write_com(0x01);        //清屏
        write_com(0x80);
        for(num=0;num<16;num++)
        {
           write_date(table[num]);
        }
        write_com(0x80+0x40);
        for(num=0;num<16;num++)
        {
           write_date(table1[num]);
        }
}

/**************************************************
函數(shù)功能:主函數(shù)
***************************************************/
void main(void)
{         
          BEEP=1;                //禁止蜂鳴器
          en=0;
          P0=0xff;
                init1602();
        write_com(0x38);        //設(shè)置工作方式
        write_com(0x0c);        //設(shè)置光標(biāo)
        write_com(0x06);        //設(shè)置輸入方式
        write_com(0x01);        //清屏
        write_com(0x80);
          for(num=0;num<16;num++)
        {
           write_date(shuzi[num]);
        }
        while(1);
}   

評(píng)分

參與人數(shù) 1威望 +50 黑幣 +50 收起 理由
admin + 50 + 50 回帖助人的積分獎(jiǎng)勵(lì)

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:65751 發(fā)表于 2014-9-17 11:04 | 顯示全部樓層
樓上的主函數(shù)可去掉 init1602();,因?yàn)樗竺娴?write_com等等實(shí)際就是初始化,原意是在主函數(shù)中自己初始化,顯示123456789ABCDEFG,不想調(diào)用void delays(uint x)和void init1602()。但為什么放著void delays(uint x)和void init1602()這兩個(gè)函數(shù),不調(diào)用它們,會(huì)出現(xiàn)奇怪現(xiàn)像呢。求解。
回復(fù)

使用道具 舉報(bào)

ID:65751 發(fā)表于 2014-9-17 20:39 | 顯示全部樓層
誰來評(píng)評(píng)理呀,即把我首發(fā)的程序去掉void delays(uint x)和void init1602()函數(shù),就能正常顯示16個(gè)字符了,為什么會(huì)這樣的,哪兩個(gè)函數(shù)主程序根本沒調(diào)用呀。
回復(fù)

使用道具 舉報(bào)

ID:65751 發(fā)表于 2014-9-17 21:16 | 顯示全部樓層
重大進(jìn)展,把我首發(fā)的程序中的函數(shù)void ready()改成如下,不刪除void delays(uint x)和void init1602()函數(shù)也能正常顯示123456789ABCDEFG這十六個(gè)字符了。
void ready()
{
        unsigned char sta;
        P0 = 0xFF;
        rs = 0;
        rw = 1;
        do        {
                en = 1;
                sta = P0;
                en = 0;
        }while(sta & 0x80);//當(dāng)為0時(shí)表示不忙,退出循環(huán)。

}

原ready()函數(shù)為:
void ready()
{
        P0=0xff;
        rs=0;  //RS(H/L),低電平選擇命令
        rw=1;  //RW(H/L),讀操作
        en=1;
        while(P0&0x80); //當(dāng)為0時(shí)表示不忙,退出循環(huán)。
        en=0;
}
應(yīng)該是原來ready()函數(shù)有問題才會(huì)導(dǎo)致哪么多奇怪的問題,上面比較一下,原來錯(cuò)在哪呢?
回復(fù)

使用道具 舉報(bào)

ID:65751 發(fā)表于 2014-10-3 16:18 | 顯示全部樓層
本帖最后由 codenew 于 2014-10-3 16:24 編輯

忘了總結(jié),導(dǎo)致莫名的現(xiàn)像真正原因是40P鎖緊器彈簧接觸不良!
40p.jpg
回復(fù)

使用道具 舉報(bào)

ID:153199 發(fā)表于 2017-2-19 12:07 | 顯示全部樓層
感謝樓主分享,我也遇到過由于此問題,無法寫進(jìn)程序
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久久久久久久9999 | 欧美一级小视频 | 999久久久| 亚洲精彩视频 | 欧美一区二不卡视频 | 亚洲综合精品 | 亚洲精品自在在线观看 | 青青久草 | 91精品国产欧美一区二区成人 | 国产人成精品一区二区三 | 中文字幕一区在线观看视频 | 欧产日产国产精品99 | 国产伦精品一区二区三区高清 | 无吗视频 | 亚洲精品一区二区网址 | 久久久久免费精品国产 | 中文字幕av一区 | 99久久免费精品国产男女高不卡 | 青青操91 | 中文字幕亚洲精品 | 国产成人精品在线 | 国产视频中文字幕在线观看 | 亚洲最新网址 | 中文字字幕在线中文乱码范文 | 国产精品久久99 | 午夜久久久久久久久久一区二区 | 一区二区三区免费 | 日本小视频网站 | 久久天堂| www.欧美.com| 在线观看中文字幕一区二区 | 国产精品乱码一区二区三区 | 欧美日韩不卡 | 亚洲精品自拍视频 | 成人欧美一区二区三区 | 精精国产xxxx视频在线 | 亚洲一区精品在线 | 91久久夜色精品国产网站 | 欧美精品三区 | 国产成人精品久久二区二区 | 欧美亚洲另类在线 |