欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機程序,我想輸入一個任意數(shù)字,然后顯示在lcd上,但是不行,希望求解 [打印本頁]

作者: 刮痧小能手    時間: 2021-2-27 20:23
標題: 單片機程序,我想輸入一個任意數(shù)字,然后顯示在lcd上,但是不行,希望求解
#include"reg52.h"
#include "lcd.h"
typedef unsigned int u16;
typedef unsigned char u8;

void UsartInit()      //初始串口
{
  TMOD=0x20;
  TH1=0xF3;      //設置比特率
  TL1=0xF3;
  PCON=0x80;
  TR1=1;
  SCON=0x50;
  ES=1;
  EA=1;
}

void Usart() interrupt 4
{
  u8 receiveData;
  receiveData=SBUF;
  receiveDat=receiveData+0x30;   
  LcdWriteData(receiveData);   //寫入函數(shù),寫入函數(shù)
                                                    在另一個文檔有過設置
  RI =0;
  SBUF=receiveData;
  while(!TI);
  TI=0;
}

void main()
{
  LcdInit();        //初始化函數(shù),另一個.c文檔有說明
  UsartInit();
  while(1);
}
作者: 刮痧小能手    時間: 2021-2-27 20:39
同時,命令函數(shù)也是有的,lcdwritecom,大佬解答時方便直接用這個
作者: 人人學會單片機    時間: 2021-2-27 21:18
你真是人才,在串口中斷里面 居然去調(diào)用LCD顯示函數(shù)。把LCD顯示獨立 把串口收發(fā)獨立 ,這樣處理串口的時候,不會被迫增加時間。
還有 串口發(fā)送使用whiel 死等是很浪費CPU的。可以用中斷直接處理就行了。
這是LCD http://m.raoushi.com/bbs/dpj-200685-1.html
這是串口http://m.raoushi.com/bbs/dpj-200927-1.html
這是串口打印 http://m.raoushi.com/bbs/dpj-201660-1.html
作者: wulin    時間: 2021-2-27 21:45
void Usart() interrupt 4
{
        u8 receiveData;
        RI =0;
        receiveData=SBUF;
//        receiveDat=receiveData+0x30;   
        lcdwritecom(0x80);                                        //數(shù)據(jù)指針設置顯示位置  
        LcdWriteData(receiveData+0x30);                //寫入函數(shù),數(shù)據(jù)轉(zhuǎn)換成ASCII字符碼
        SBUF=receiveData;                                        //將收到的數(shù)據(jù)返回上位機
        while(!TI);
        TI=0;
}
作者: 刮痧小能手    時間: 2021-2-27 22:01
wulin 發(fā)表于 2021-2-27 21:45
void Usart() interrupt 4
{
        u8 receiveData;

不行呀,好兄弟,我用串口發(fā)一個1,lcd上出現(xiàn)亂碼呢。。。。
作者: wulin    時間: 2021-2-28 06:47
刮痧小能手 發(fā)表于 2021-2-27 22:01
不行呀,好兄弟,我用串口發(fā)一個1,lcd上出現(xiàn)亂碼呢。。。。

出現(xiàn)亂碼要在串口助手里看看返回的數(shù)字是否正確以區(qū)分是串口程序問題還是LCD驅(qū)動程序問題
作者: 刮痧小能手    時間: 2021-2-28 09:09
wulin 發(fā)表于 2021-2-28 06:47
出現(xiàn)亂碼要在串口助手里看看返回的數(shù)字是否正確以區(qū)分是串口程序問題還是LCD驅(qū)動程序問題

串口上也不會顯示我所輸入的數(shù)字,那咋么辦,我沒有一點頭緒呀,應該改哪里
作者: 天意如是    時間: 2021-2-28 10:42
很簡單,網(wǎng)上大把例子
作者: wwh2382    時間: 2021-2-28 10:45
懷疑你是一接觸單片機就直接上手串口和顯示屏,若果真這樣就沒有不蒙的,還是循序漸進吧
作者: 刮痧小能手    時間: 2021-2-28 12:21
wwh2382 發(fā)表于 2021-2-28 10:45
懷疑你是一接觸單片機就直接上手串口和顯示屏,若果真這樣就沒有不蒙的,還是循序漸進吧

不不不,我學了一點了,20天了,我已經(jīng)想了很久了,好幾天了都沒有結(jié)果。
作者: 刮痧小能手    時間: 2021-2-28 15:37
天意如是 發(fā)表于 2021-2-28 10:42
很簡單,網(wǎng)上大把例子

沒有的啦,我也找了,反正沒找到對的,如果有,還請你不嫌麻煩給一個
作者: 刮痧小能手    時間: 2021-2-28 15:52
人人學會單片機 發(fā)表于 2021-2-27 21:18
你真是人才,在串口中斷里面 居然去調(diào)用LCD顯示函數(shù)。把LCD顯示獨立 把串口收發(fā)獨立 ,這樣處理串口的時候 ...

您所說的獨立出來是否如此,我試過這樣還是不行,如果哪里不對還望指正,感謝!

#include"reg52.h"
#include "lcd.h"
typedef unsigned int u16;
typedef unsigned char u8;

void UsartInit()
{
  TMOD=0x20;
  TH1=0xF3;
  TL1=0xF3;
  PCON=0x80;
  TR1=1;
  SCON=0x50;
  ES=1;
  EA=1;
}
  

u8 receiveData;
void lcdscreen()                                                                          //lcd顯示獨立出來
{
        LcdInit();
    LcdWriteCom(0x80);                                                           //設置指針在第一格
    LcdWriteData(receiveData+0x30);                                        //寫入函數(shù),數(shù)據(jù)轉(zhuǎn)換成ASCII字符碼
                      
}




void Usart() interrupt 4
{
        u8 receiveData;
        RI=0;
        receiveData=SBUF;
                lcdscreen();                                                //lcd顯示
        SBUF=receiveData;                                        //將收到的數(shù)據(jù)返回上位機
        while(!TI);
        TI=0;
}

void main()
{
  LcdInit();                                                                        //初始化lcd
  UsartInit();                                                                        //初始化串口
   
  while(1);
  
}
作者: 刮痧小能手    時間: 2021-2-28 19:21
難道真的就沒有人能寫出來吧,不會吧
作者: houchg    時間: 2021-2-28 22:55
看這個程序貌似沒有錯誤,把寫入函數(shù)上傳一下,分析分析
作者: 刮痧小能手    時間: 2021-3-1 08:42
houchg 發(fā)表于 2021-2-28 22:55
看這個程序貌似沒有錯誤,把寫入函數(shù)上傳一下,分析分析

寫入函數(shù)就不傳了吧,我是看視頻學的教程,都是一點點抄過去的,而且別的程序也用過,沒有問題的,肯定

作者: 青街古城    時間: 2021-3-1 09:02
你是在單片機上面實現(xiàn)嗎還是仿真,如果是實物的話,你看單片機的晶振頻率是不是對的。
作者: 刮痧小能手    時間: 2021-3-1 10:29
青街古城 發(fā)表于 2021-3-1 09:02
你是在單片機上面實現(xiàn)嗎還是仿真,如果是實物的話,你看單片機的晶振頻率是不是對的。

單片機上實現(xiàn),波特率是對的,所以大哥我代碼都出來了,還有可以修改的地方嗎,我這邊單片機上lcd還是沒有顯示哎
作者: wulin    時間: 2021-3-1 11:50
刮痧小能手 發(fā)表于 2021-3-1 10:29
單片機上實現(xiàn),波特率是對的,所以大哥我代碼都出來了,還有可以修改的地方嗎,我這邊單片機上lcd還是沒 ...

樓主的波特率肯定不對,以下兩種任選。修改完整代碼如下,但不宜在中斷中調(diào)用LCD顯示函數(shù)。
  1. #include"reg52.h"
  2. //#include "lcd.h"
  3. typedef unsigned int u16;
  4. typedef unsigned char u8;

  5. sbit LCD_RS=P3^5;
  6. sbit LCD_EN=P3^4;
  7. sbit LCD_RW=P3^3;

  8. u8 receiveData;
  9. /*
  10. void UsartInit()
  11. {
  12.         TMOD=0x20;
  13.         TH1=0xF4;
  14.         TL1=0xF4;
  15. //        PCON=0x80;//不加倍
  16.         TR1=1;
  17.         SCON=0x50;
  18.         ES=1;
  19.         EA=1;
  20. }
  21. */
  22. void UsartInit()
  23. {
  24.         TMOD=0x20;
  25.         TH1=0xE8;
  26.         TL1=0xE8;
  27.         PCON=0x80;//加倍
  28.         TR1=1;
  29.         SCON=0x50;
  30.         ES=1;
  31.         EA=1;
  32. }
  33.   
  34. /*******100us延時程序********/
  35. void delay(u16 x)
  36. {
  37.         u16 a,b;
  38.         for(a=x;a>0;a--)
  39.                 for(b=10;b>0;b--);
  40. }

  41. /*******液晶寫指令程序********/
  42. void LcdWriteCom(u8 com)
  43. {
  44.         LCD_EN=0;        //初始設置LCD_EN低電平
  45.         LCD_RS=0;        //允許寫指令
  46.         P0=com;                //傳遞指令
  47.         delay(10);        //延時1ms
  48.         LCD_EN=1;        //使能寫入
  49.         delay(10);        //延時1ms
  50.         LCD_EN=0;        //低跳變執(zhí)行
  51.        
  52. }
  53. /*******液晶寫數(shù)據(jù)程序********/
  54. void LcdWriteData(u8 date)
  55. {
  56. //        LCD_EN=0;        //初始設置LCD_EN低電平
  57.         LCD_RS=1;        //允許寫數(shù)據(jù)
  58.         P0 =date;        //傳遞數(shù)據(jù)
  59.         delay(10);        //延時1ms
  60.         LCD_EN=1;        //使能寫入
  61.         delay(10);        //延時1ms
  62.         LCD_EN=0;        //低跳變執(zhí)行
  63.        
  64. }
  65. /*******液晶初始化程序********/
  66. void LcdInit()                //設置顯示模式、
  67. {
  68.         LCD_RW=0;                        //初始設置LCD_RW低電平
  69.         LcdWriteCom(0x38);//設置16*2顯示,5*7點陣,8位數(shù)據(jù)接口
  70.         LcdWriteCom(0x01);//顯示清零,數(shù)據(jù)指針清零
  71.         LcdWriteCom(0x0c);//設置開顯示,不顯光標
  72.         LcdWriteCom(0x06);//設置寫一個字符后地址指針加1
  73. }
  74. void lcdscreen(u8 t)    //lcd顯示獨立出來
  75. {
  76. //        LcdInit();
  77.         LcdWriteCom(0x80);   //設置指針在第一格
  78.         LcdWriteData(t+0x30);//寫入函數(shù),數(shù)據(jù)轉(zhuǎn)換成ASCII字符碼
  79. }

  80. void Usart() interrupt 4
  81. {
  82.         u8 receiveData;
  83.         RI=0;
  84.         receiveData=SBUF;
  85.         lcdscreen(receiveData);        //lcd顯示
  86.         SBUF=receiveData;   //將收到的數(shù)據(jù)返回上位機
  87.         while(!TI);
  88.         TI=0;
  89. }

  90. void main()
  91. {
  92.         LcdInit();          //初始化lcd
  93.         UsartInit();        //初始化串口

  94.         while(1);
  95. }
復制代碼



作者: design003    時間: 2021-3-1 12:37
先確定是哪里的問題   寫液晶呢直接先寫個常數(shù)    根據(jù)結(jié)果處理  這樣你就有方向了
作者: 刮痧小能手    時間: 2021-3-1 18:11
wulin 發(fā)表于 2021-3-1 11:50
樓主的波特率肯定不對,以下兩種任選。修改完整代碼如下,但不宜在中斷中調(diào)用LCD顯示函數(shù)。

不管行不行,你寫了這么多,我一定要試一下的,這么久終于有個認真回答的了,我愛死你了
作者: 刮痧小能手    時間: 2021-3-1 19:03
wulin 發(fā)表于 2021-3-1 11:50
樓主的波特率肯定不對,以下兩種任選。修改完整代碼如下,但不宜在中斷中調(diào)用LCD顯示函數(shù)。

我這邊單片機和你肯定不一樣,幾個端口不一樣,所以初始化那幾個沒有復制,但是其他的復制了,我也檢查了幾遍還是沒有用。。。我再想想辦法吧,感謝你了

作者: wulin    時間: 2021-3-1 21:17
刮痧小能手 發(fā)表于 2021-3-1 19:03
我這邊單片機和你肯定不一樣,幾個端口不一樣,所以初始化那幾個沒有復制,但是其他的復制了,我也檢查了 ...

這個程序是經(jīng)過實物驗證過的,只要你是用的51內(nèi)核單片機,串口初始化定時器都一樣。你的核心錯誤就是串口初始化定時器錯誤導致波特率不對。LCD1602與MCU的接口是可以按實際硬件電路定義的。
作者: wwh2382    時間: 2021-3-2 17:41
應該確認你的單片機晶振是不是11.0592m的。串口程序的波特率都是按照這個數(shù)字計算的,否則即使別人的程序在你的單片機上調(diào)通,也無法與串口助手之類的工具正常通信




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1