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

QQ登錄

只需一步,快速開(kāi)始

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

求助,單片機(jī)程序?yàn)槭裁磿?huì)顯示亂碼?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


  1. #include <reg51.h>   
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define delay4us() {_nop_();_nop_();_nop_();_nop_();}

  6. sbit RS = P2^0;
  7. sbit RW = P2^1;
  8. sbit E  = P2^2;
  9. sbit CS  = P1^0;
  10. sbit CLK = P1^1;
  11. sbit DIO = P1^2;

  12. uchar Display_Buffer[] = "0.00V";
  13. uchar code Line1[] = "Current Voltage:";
  14. void DelayMS(uint ms)  {
  15.          uchar i;
  16.         while(ms--)             {
  17.                      for(i=0;i<120;i++);
  18.         }
  19. }

  20. bit LCD_Busy_Check()  {
  21.          bit result;
  22.         RS = 0;
  23.         RW = 1;
  24.         E  = 1;
  25.         delay4us();
  26.         result =     (bit)(P0&0x80);
  27.         E  = 0;
  28.         return result;
  29. }
  30. void LCD_Write_Command(uchar cmd)  {
  31.          while(LCD_Busy_Check());
  32.         RS = 0;
  33.         RW = 0;
  34.         E  = 0;
  35.         _nop_();
  36.         _nop_();
  37.         P0 = cmd;
  38.         delay4us();
  39.         E = 1;
  40.         delay4us();
  41.         E = 0;
  42. }
  43. void Set_Disp_Pos(uchar pos)  {
  44.          LCD_Write_Command(pos |     0x80);
  45. }
  46. void LCD_Write_Data(uchar dat)   {
  47.          while(LCD_Busy_Check());
  48.         RS = 1;
  49.         RW = 0;
  50.         E  = 0;
  51.         P0 = dat;
  52.         delay4us();
  53.         E = 1;
  54.         delay4us();
  55.         E = 0;
  56. }

  57. void LCD_Initialise()  {
  58.         LCD_Write_Command(0x38);     DelayMS(1);
  59.         LCD_Write_Command(0x0c);     DelayMS(1);
  60.         LCD_Write_Command(0x06);     DelayMS(1);
  61.         LCD_Write_Command(0x01);     DelayMS(1);
  62. }

  63. uchar Get_AD_Result() {
  64.          uchar i,dat1=0,dat2=0;
  65.         CS  = 0;
  66.         CLK = 0;
  67.         DIO = 1; _nop_();     _nop_();
  68.         CLK = 1; _nop_();     _nop_();
  69.         CLK = 0;DIO = 1; _nop_();     _nop_();
  70.         CLK = 1; _nop_();     _nop_();
  71.         CLK = 0;DIO = 1; _nop_();     _nop_();
  72.         CLK = 1;DIO = 1; _nop_();     _nop_();
  73.         CLK = 0;DIO = 1; _nop_();     _nop_();
  74.         for(i=0;i<8;i++)             {
  75.                      CLK = 1; _nop_(); _nop_();
  76.                     CLK = 0; _nop_(); _nop_();
  77.                     dat1 = dat1 << 1 | DIO;        
  78.         }
  79.         for(i=0;i<8;i++)             {
  80.                      dat2 = dat2 << ((uchar)(DIO)<<i);
  81.                     CLK = 1; _nop_(); _nop_();
  82.                     CLK = 0; _nop_(); _nop_();
  83.         }
  84.         CS = 1;
  85.         return (dat1 == dat2) ?     dat1:0;
  86. }

  87. void main()  {
  88.          uchar i;
  89.         uint d;
  90.         LCD_Initialise();
  91.         DelayMS(10);
  92.         while(1)
  93.         {
  94.                      d = Get_AD_Result()*500.0/255;
  95.                     Display_Buffer[0]=d/100+'0';
  96.                     Display_Buffer[2]=d/10%10+'0';
  97.                     Display_Buffer[3]=d%10+'0';
  98.                     Set_Disp_Pos(0x01);
  99.                     i = 0;
  100.                     while(Line1[ i]!='\0')  {
  101.                                  LCD_Write_Data(Line1[i+1]);        
  102.                     }
  103.                     Set_Disp_Pos(0x46);
  104.                     i = 0;
  105.                     while(Display_Buffer!='\0')
  106.                     {
  107.                                  LCD_Write_Data(Display_Buffer[i+1]);        
  108.                     }
  109.         }
  110. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:235200 發(fā)表于 2023-11-22 00:33 | 只看該作者
造成亂碼的原因是從AD轉(zhuǎn)換器中讀出的數(shù)據(jù)不正確,程序只判斷了正確的數(shù)據(jù)轉(zhuǎn)換為ASCII碼顯示,而未去判斷不正確數(shù)據(jù)的處理
回復(fù)

使用道具 舉報(bào)

板凳
ID:275826 發(fā)表于 2023-11-22 14:26 | 只看該作者
while(Display_Buffer!='\0')錯(cuò)誤
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表