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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4227|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

單片機液晶傳送P0口改為P1口,改完不顯示?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:763540 發(fā)表于 2020-6-20 19:23 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
只改了 P0=com;//送入數(shù)據(jù),P0=dat;//送入數(shù)據(jù)    改完不顯示,初學,請哥哥們指教?
[code]#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int     
sbit RW=P2^6;//定義LCD1602液晶顯示器讀寫端         
sbit RS=P2^5;//定義LCD1602液晶顯示器數(shù)據(jù)命令端
sbit EN=P2^7;//定義LCD1602液晶顯示器使能端
sbit qiting=P3^0;//定義啟停按鍵
uchar qitingnum;//定義啟停次數(shù)變量
uint count;//定時器0定時中斷次數(shù)變量
unsigned long speed=0;//定義速度變量
uchar code tab1[]={"RPM:"};//顯示轉(zhuǎn)速的固定大寫字符
uchar code tab2[]={"rpm/sec"};//顯示轉(zhuǎn)速的固定小寫字符
/**ms級延時子程序**/
  void delay(uint x)
{
   uint i,j;                       
   for(i=0;i<x;i++)     
    for(j=0;j<110;j++);
  }
/********液晶寫入指令函數(shù)與寫入數(shù)據(jù)函數(shù)**************/
  void write_1602com(uchar com)//****液晶寫入指令函數(shù)****
{
   RS=0;//數(shù)據(jù)/指令選擇置為指令
   P0=com;//送入數(shù)據(jù)   *******************************這個我改成了P1
   delay(1);
   EN=1;//拉高使能端,為制造有效的下降沿做準備。
   delay(1);
   EN=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令。
  }
  void write_1602dat(uchar dat)//液晶寫入數(shù)據(jù)函數(shù)
{
   RS=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)
   P0=dat;//送入數(shù)據(jù)  *******************************這個我改成了P1
   delay(1);
   EN=1; //en置高電平,為制造下降沿做準備。
   delay(1);
   EN=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命。
  }
  void lcd1602_init()//液晶初始化函數(shù)
{
   uchar a;
   RW=0;
   write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數(shù)據(jù)。
   write_1602com(0x0c);//開顯示不顯示光標
   write_1602com(0x06);//整屏不移動,光標自動右移。
   write_1602com(0x01);//清顯示        
   write_1602com(0x80);//顯示固定符號從第一行第0個(從第0個開始數(shù))位置開始顯示
   for(a=0;a<4;a++)
{
    write_1602dat(tab1[a]);//向液晶屏寫固定符號部分
   }
   write_1602com(0x80+9);//顯示固定符號寫入位置,從第一行第9個(從第0個開始數(shù))位置開始顯示。
   for(a=0;a<8;a++)
{
    write_1602dat(tab2[a]);//寫顯示固定符號
   }
}
/*************轉(zhuǎn)速顯示函數(shù)**********/  
  void display(unsigned long speed)//轉(zhuǎn)速顯示函數(shù)
{
   if(speed<=99999)
{
    uchar wan,qian,bai,shi,ge;//定義拆字變量
    wan=speed/10000;//轉(zhuǎn)速/10000得到萬位
    qian=speed%10000/1000;//轉(zhuǎn)速/10000的余數(shù)/1000得到千位
    bai=speed%1000/100;//取得百位
    shi=speed%100/10;//取得十位數(shù)字
    ge=speed%10;//取得個位數(shù)字
    write_1602com(0x80+4);//從第一行第4個(從第0個開始數(shù))位置開始顯示
    if(wan==0)//萬位為0時
  {
     write_1602dat(' ');//顯示空格
    }
    else//萬位不為0時
  {
     write_1602dat(0x30+wan);//顯示萬位的數(shù)據(jù),+0x30是因為在液晶的字庫中,0的地址是0x30,1的地址是0x31,以此類推。
    }
    if((wan+qian)==0)//萬位和千位都為0時
  {
     write_1602dat(' ');//千位顯示空格
    }
    else//萬位和千位不都為0時
  {
     write_1602dat(0x30+qian);//顯示千位數(shù)據(jù)
    }

    if((wan+qian+bai)==0)//萬位、千位和百位都是0時
  {
     write_1602dat(' ');//顯示空格
    }
    else//萬位、千位和百位不都為0時
  {
     write_1602dat(0x30+bai);//顯示百位數(shù)據(jù)
    }
    if((wan+qian+bai+shi)==0)//萬位、千位、百位和十位都為0時
  {
     write_1602dat(' ');//顯示空格
    }
    else//萬位、千位、百位和十位不都為0時
  {
     write_1602dat(0x30+shi);//顯示十位數(shù)據(jù)
    }               
    write_1602dat(0x30+ge);//顯示個位數(shù)據(jù),數(shù)字+0x30得到該數(shù)字的LCD1602顯示碼。
  }
}
/**************按鍵掃描函數(shù)*****************/  
  void keyscan()//按鍵掃描函數(shù)
{
   if(qiting==0)//判斷啟停鍵是否按下
{
    delay(5);
    if(qiting==0)//判斷啟停鍵是否再次按下
  {
     qitingnum++;//啟停次數(shù)變量加加
     lcd1602_init();//LCD1602液晶顯示器初始化函數(shù)
     while(!qiting);//等待啟停鍵松開
   }
  }
   if(qitingnum==1)//判斷啟停次數(shù)變量是否為1
{
    display(speed);//顯示速度函數(shù)
  }
   if(qitingnum==2)//判斷啟停次數(shù)變量是否為2
{
    write_1602com(0x08);//關(guān)LCD1602液晶顯示器顯示
    qitingnum=0;//啟停次數(shù)變量置0
   }
}
/**********定時器0、計數(shù)器1初始化子程序*********/
  void Time0_Time1_init()
{
   TMOD=0X51;//模式選定時器0、計數(shù)器1,工作方式選定時器0定時模式1、計數(shù)器1計數(shù)模式1。
   TH0=(65536-50000)/256;//定時器0高8位定時50毫秒
   TL0=(65536-50000)%256;//定時器0低8位定時50毫秒
   TH1=0;//計數(shù)器1高8位計數(shù)初值為0
   TL1=0;//計數(shù)器1低8位計數(shù)初值為0
   EA=1;//打開總中斷
   ET0=1;//打開定時器0的中斷
   TR0=1;//打開定時器0
   ET1=1;//打開計數(shù)器1的中斷
   TR1=1;//打開計數(shù)器1
}
/************主函數(shù)***************/  
  void main()//主函數(shù)
{
   Time0_Time1_init();//定時器0與外部中斷0初始化子程序
   while(1)//固定循環(huán)
{  
    keyscan();
  }
}
/**定時器0中斷服務(wù)子程序**/                                      
  void Timer0() interrupt 1
{
   TH0=(65536-50000)/256;//重裝定時器0高8位定時50毫秒
   TL0=(65536-50000)%256;//重裝定時器0低8位定時50毫秒
   count++;//定時器0定時中斷次數(shù)變量加加
   if(count==20)//判斷定時器0定時中斷次數(shù)變量是否等于20,即1秒鐘。
{
    count=0;//定時器0定時中斷次數(shù)變量清0
    TR1=0;//關(guān)計數(shù)器1,開始統(tǒng)計1秒鐘內(nèi),霍爾元件發(fā)送的脈沖個數(shù)。
    speed=TH1*256+TL1;//表示計數(shù)器1計數(shù)霍爾元件發(fā)送的脈沖個數(shù),即轉(zhuǎn)速:轉(zhuǎn)/秒。
    TH1=0;//計數(shù)器1高8位計數(shù)清0,為了下一次計數(shù)。
    TL1=0;//計數(shù)器1低8位計數(shù)0,為了下一次計數(shù)。
    TR1=1;//開計數(shù)器1,為了下一次統(tǒng)計1秒鐘內(nèi),霍爾元件發(fā)送的脈沖個數(shù)。
   }
}[/code]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:155507 發(fā)表于 2020-6-20 23:12 | 只看該作者
這個要看你的硬件電路了,你的電路改了嗎?
回復(fù)

使用道具 舉報

板凳
ID:763540 發(fā)表于 2020-6-21 09:42 | 只看該作者
angmall 發(fā)表于 2020-6-20 23:12
這個要看你的硬件電路了,你的電路改了嗎?

硬件改過了,液晶D0-D7接口從P0已改至P1
回復(fù)

使用道具 舉報

地板
ID:590038 發(fā)表于 2020-6-21 10:21 | 只看該作者
P1改回P0查看是否正常;
回復(fù)

使用道具 舉報

5#
ID:213173 發(fā)表于 2020-6-21 10:21 | 只看該作者
wangzhenongyao 發(fā)表于 2020-6-21 09:42
硬件改過了,液晶D0-D7接口從P0已改至P1

從道理上來講不會發(fā)生樓主所述現(xiàn)象,仔細檢查硬件電路,看看P1除了接液晶屏D0-D7外有沒有接其它電路。還不行在P1加上拉電阻試試。
回復(fù)

使用道具 舉報

6#
ID:763540 發(fā)表于 2020-6-21 12:41 | 只看該作者
guocheng1144 發(fā)表于 2020-6-21 10:21
P1改回P0查看是否正常;

謝謝您
回復(fù)

使用道具 舉報

7#
ID:763540 發(fā)表于 2020-6-21 12:41 | 只看該作者
wulin 發(fā)表于 2020-6-21 10:21
從道理上來講不會發(fā)生樓主所述現(xiàn)象,仔細檢查硬件電路,看看P1除了接液晶屏D0-D7外有沒有接其它電路。還 ...

謝謝您
回復(fù)

使用道具 舉報

8#
ID:743654 發(fā)表于 2020-6-21 14:26 | 只看該作者
硬件圖發(fā)上來看看
回復(fù)

使用道具 舉報

9#
ID:763540 發(fā)表于 2020-6-21 17:54 | 只看該作者
cheney03 發(fā)表于 2020-6-21 14:26
硬件圖發(fā)上來看看

C:\Users\Administrator\Desktop\211731dzszwjai4io44ipp.png
回復(fù)

使用道具 舉報

10#
ID:763540 發(fā)表于 2020-6-21 18:07 | 只看該作者
cheney03 發(fā)表于 2020-6-21 14:26
硬件圖發(fā)上來看看

C:\Users\Administrator\Desktop\05944c9080d8f77b2f7467f4cdcd280.jpg
回復(fù)

使用道具 舉報

11#
ID:763540 發(fā)表于 2020-6-21 19:51 | 只看該作者
硬件連接圖及試驗現(xiàn)象

05944c9080d8f77b2f7467f4cdcd280.jpg (144.72 KB, 下載次數(shù): 19)

05944c9080d8f77b2f7467f4cdcd280.jpg

211731dzszwjai4io44ipp.png (89.2 KB, 下載次數(shù): 21)

211731dzszwjai4io44ipp.png
回復(fù)

使用道具 舉報

12#
ID:420836 發(fā)表于 2020-6-21 23:13 | 只看該作者
試試刪除其他功能,僅測試LCD部分。
回復(fù)

使用道具 舉報

13#
ID:584814 發(fā)表于 2020-6-24 06:46 | 只看該作者
如果P0能正常工作而P1不行,建議查P1的上拉電阻是否有,或P1上是否有其他東東。
這個程序?qū)懛ū容^原始,數(shù)據(jù)占8個口必須獨占的,圖上看你的1602初始化都沒能過。
如果端口緊張可以用四線程序(網(wǎng)上多不需加任何硬件改動且通用),最少用4+2個口就可以驅(qū)動1602顯示,而且可以做到用任意6個加過上拉的I/O口都可以驅(qū)動任意1602。當然硬件改動還可以減少占口,除加IIC轉(zhuǎn)換( PCF8574只要用2個口可擬出8個口用掉6個還余2個可驅(qū)動任意1602,模塊某寶上2元左右已多用了1個口控制背光還余1個口可用)外其他可實驗不推薦應(yīng)用。
回復(fù)

使用道具 舉報

14#
ID:763540 發(fā)表于 2020-6-24 11:46 | 只看該作者
man1234567 發(fā)表于 2020-6-24 06:46
如果P0能正常工作而P1不行,建議查P1的上拉電阻是否有,或P1上是否有其他東東。
這個程序?qū)懛ū容^原始,數(shù) ...

謝謝您!
我用該程序加載到學習板上就可以正常顯示。加載到最小系統(tǒng)板上就不行:P1端口不行,P0端口外加上拉電阻也不行,P0/P1現(xiàn)象都一樣,杜邦線順序檢查了很多遍,用表也測了,排除了順序接錯、接觸不良的現(xiàn)象,還是不行,這個問題已經(jīng)糾結(jié)了好幾天了!
回復(fù)

使用道具 舉報

15#
ID:763540 發(fā)表于 2020-6-24 12:35 | 只看該作者
感謝大家!
感謝大家!
問題已經(jīng)解決了,RS和RW接反了!這么低級的錯誤,折騰了幾天,謝謝各位師傅的指點!!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区视频在线观看 | 国产精品美女久久久免费 | 国产精品夜间视频香蕉 | 亚洲 欧美 日韩在线 | 免费一级片 | 国产精品欧美一区二区三区 | 韩日一区二区三区 | 成人深夜福利网站 | 日韩精品一区二区三区中文字幕 | 久久久久久国产精品免费免费狐狸 | 日韩久久中文字幕 | 91视频.com| 蜜臀久久99精品久久久久久宅男 | 99综合| 91玖玖 | 亚洲国产高清免费 | 毛片免费观看视频 | 精品日韩在线 | 玖玖玖在线观看 | 美女黄色在线观看 | 中文字幕精品一区二区三区在线 | 黄色免费在线观看网站 | 性高湖久久久久久久久aaaaa | 日韩一区二区三区在线视频 | 武道仙尊动漫在线观看 | 欧美午夜影院 | 久久日韩精品 | 一区二区三区欧美在线观看 | 天堂久 | 欧美激情综合 | 中文字幕日韩欧美一区二区三区 | 成年人在线观看视频 | 亚洲视频免费观看 | 91亚洲欧美 | 久久精品亚洲精品 | 午夜激情在线视频 | 色999视频 | 在线免费观看成人 | 亚洲久在线 | 全免一级毛片 | 在线色|