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

標題: 請問為什么Proteus仿真的時候 LCD1602的 3個寄存器端口 電平一直是灰色? [打印本頁]

作者: yuury    時間: 2021-6-28 16:54
標題: 請問為什么Proteus仿真的時候 LCD1602的 3個寄存器端口 電平一直是灰色?
請問為什么仿真的時候 LCD1602的 3個寄存器端口 電平一直是灰色?


單片機源程序如下:
  1. #include "reg51.h"
  2. #include "stdio.h"

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5.    

  6. #define D P0
  7. sbit E=P2^7;
  8. sbit RS=P2^6;
  9. sbit RW=P2^5;


  10. void delay_ms(uchar xms);                    
  11. void LcdWriteCom(uchar com);               
  12. void LcdWriteData(uchar dat);            
  13. void LcdInit();                                
  14. void Show_string1(uchar a[]);            
  15. void Show_string2(uchar a[]);            
  16. void show_string(uchar add,uchar a[]);            
  17. void show_number(uchar add,uint a);               
  18. void show_float(uchar add,float a);        


  19. void main()
  20. {
  21.     LcdInit();
  22.     Show_string1("LCD1602test");
  23.     while(1);
  24. }

  25. void delay_ms(uchar xms)
  26. {
  27.     uchar i,j;
  28.     for(i=xms;i>0;i--)
  29.         for(j=110;j>0;j--);
  30. }


  31. void LcdWriteCom(uchar com)
  32. {
  33.     E=0;
  34.     RW=0;
  35.     RS=0;
  36.     D=com;
  37.     delay_ms(5);
  38.     E=1;
  39.     delay_ms(5);
  40.     E=0;
  41. }

  42. void LcdWriteData(uchar dat)
  43. {
  44.     E=0;
  45.     RW=0;
  46.     RS=1;
  47.     D=dat;
  48.     delay_ms(5);
  49.     E=1;
  50.     delay_ms(5);
  51.     E=0;
  52. }

  53. void LcdInit()//³õʼ»¯
  54. {
  55.     LcdWriteCom(0x38);
  56.     LcdWriteCom(0x0c);
  57.     LcdWriteCom(0x06);
  58.     LcdWriteCom(0x01);
  59.     LcdWriteCom(0x80);
  60. }



  61. void show_string(uchar add,uchar a[])
  62. {
  63.     uchar i;
  64.     LcdWriteCom(0x80+add);
  65.     for(i=0;a[i]!='\0';i++)
  66.     {
  67.         LcdWriteData(a[i]);
  68.     }
  69. }


  70. void Show_string1(uchar a[])
  71. {
  72.     uchar i;
  73.     LcdWriteCom(0x80);
  74.     for(i=0;a[i]!='\0';i++)
  75.     {
  76.         LcdWriteData(a[i]);
  77.     }
  78. }


  79. void Show_string2(uchar a[])
  80. {
  81.     uchar i;
  82.     LcdWriteCom(0x80+0X40);
  83.     for(i=0;a[i]!='\0';i++)
  84.     {
  85.         LcdWriteData(a[i]);
  86.     }
  87. }


  88. void show_number(uchar add,uint a)
  89. {
  90.     char s[10];
  91.     sprintf(s,"%d",a);               
  92.     show_string(add,(uchar *)s);        
  93. }


  94. void show_float(uchar add,float a)
  95. {
  96.     char s[10];
  97.     sprintf(s,"% .1f",a);
  98.     show_string(add,(uchar *)s);
  99. }
復制代碼




作者: yuury    時間: 2021-6-28 16:55
第一次仿真的時候是能成功顯示的,之后不知道什么原因 3個寄存器的電平就變這樣了
作者: 溫xyz    時間: 2021-6-29 06:04
你的主程序只能運行一次就停止了。改成這樣:
void main()
{
    while(1)
    {
    LcdInit();
    Show_string1("LCD1602test");
    }
}
作者: yuury    時間: 2021-6-29 10:38
溫xyz 發表于 2021-6-29 06:04
你的主程序只能運行一次就停止了。改成這樣:
void main()
{

你好,我試了下,改了之后還是不行,3個寄存器仍是灰色
作者: 名字不是重點    時間: 2021-6-29 14:04
溫xyz 發表于 2021-6-29 06:04
你的主程序只能運行一次就停止了。改成這樣:
void main()
{

應該是這樣的:
LcdInit();
  while(1)
{
Show_string1("LCD1602test");
}
作者: 名字不是重點    時間: 2021-6-29 14:06
lcd的VEE接到VDD試試?

作者: yuury    時間: 2021-6-29 14:08
名字不是重點 發表于 2021-6-29 14:04
應該是這樣的:
LcdInit();
  while(1)

在實驗箱上實操 確實亮了
但是proteus仿真一直不行,不太明白原因
作者: 名字不是重點    時間: 2021-6-29 14:27
你的CPU沒有加載代碼吧?所 有IO都是灰色的,除了上拉的那幾個
作者: yuury    時間: 2021-6-29 14:29
名字不是重點 發表于 2021-6-29 14:27
你的CPU沒有加載代碼吧?所 有IO都是灰色的,除了上拉的那幾個

!,謝謝提醒。
我看了下后發現 代碼是加載了的,但是不小心勾選了“不進行仿真”
作者: 人人學會單片機    時間: 2021-7-6 20:32
LCD1602顯示℃ 這種自定義符號 http://m.raoushi.com/bbs/dpj-200685-1.html
LCD1602液晶最新資料 說明了具體的時間要求 http://m.raoushi.com/bbs/dpj-205768-1.html




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