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

標題: 為什么經過ADC0808轉換后的,lcd1602沒有變化一直顯示0,求大神解答 [打印本頁]

作者: 花辭樹    時間: 2020-3-9 14:50
標題: 為什么經過ADC0808轉換后的,lcd1602沒有變化一直顯示0,求大神解答


單片機源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit rs=P2^0;
  5. sbit rw=P2^1;
  6. sbit en=P2^2;
  7. sbit START=P2^3;
  8. sbit ALE=P2^3;
  9. sbit CLK=P2^4;
  10. sbit OE=P2^5;
  11. sbit EOC=P2^6;
  12. uchar code table[]="Digital Ohmmeter";
  13. uchar code bby[]="(R)=";
  14. //uchar code abc[]={0,1,2,3,4,5,6,7,8,9};
  15. uchar num=0;
  16. uint  temp,getdata;
  17. uchar qian, bai, shi, ge;
  18. void delay(uint z)
  19.           {
  20.         uint x,y;
  21.           for(z=x;x>0;x--)
  22.           for(y=110;y>0;y--);
  23.           }
  24. bit lcd_busy_check()                                                        //1602狀態檢測是否忙碌
  25.         {
  26.           bit  result;
  27.           rs=0;
  28.           rw=1;
  29.           en=1;
  30.           delay(10);
  31.           result=(bit)(P0&0x80);
  32.           en=0;
  33.           return  result;
  34.         }

  35. void write_comd(uchar command)                                            //寫LCD命令
  36.         {
  37.           while(lcd_busy_check());
  38.           rw=0;
  39.           rs=0;
  40.           en=0;
  41.           P0=command;
  42.           delay(5);
  43.           en=1;
  44.           delay(5);
  45.           en=0;
  46.         }

  47. void  write_data(uchar dat)                                             //向1602發送數據
  48.         {
  49.           while(lcd_busy_check());
  50.           rs=1;
  51.           rw=0;
  52.           en=0;
  53.           P0=dat;
  54.           delay(5);
  55.           en=1;
  56.           delay(5);
  57.           en=0;
  58.         }


  59. lcd_init()                                                                                                     //LCD1602初始化
  60.         {
  61.           write_comd(0x38);          //顯示模式設置為16X2顯示
  62.           write_comd(0x0c);   //開顯示屏,關光標
  63.           write_comd(0x06);    //字符進入模式:屏幕不動,字符后移
  64.           write_comd(0x01);  //清屏
  65.           write_comd(0x80);
  66.         }
  67. lcd_display()
  68.         {
  69.         uint a,b;
  70.           for(a=0;a<16;a++)
  71.                           {
  72.                           write_data(table[a]);
  73.                           }
  74.                   //delay(200);
  75.                   write_comd(0x80+0x40+2);
  76.                   for(b=0;b<4;b++)
  77.                           {
  78.                           write_data(bby[b]);
  79.                           }
  80.                   //delay(200);
  81.                   write_comd(0x80+0x40+13);
  82.                           
  83.                           write_data(0xF4);//顯示歐姆符號
  84.                         
  85.                  // delay(200);
  86.                  
  87.         }
  88.   adc0808_tra()      // AD轉換
  89.                 {
  90.                    uint getdata;
  91.                  
  92.                   START=0;
  93.                   START=1;
  94.                   delay(1);
  95.                   START=0;
  96.                   delay(5);
  97.                   EOC=1;
  98.                   while(EOC==0);
  99.                   OE=1;
  100.                   
  101.                   getdata=P1;
  102.                   OE=0;
  103.                   return getdata;        
  104.                            
  105.                   }
  106.                
  107.         

  108. void data_display()
  109.                 {        
  110.                            temp=getdata*1.0/255*500;
  111.                     qian=temp/1000;
  112.            bai=temp%1000/100;
  113.                shi=temp%100/10;
  114.                   ge=temp%10;
  115.                   
  116.                 write_comd(0x80+0x40+7);
  117.                 write_data(qian+0x30);        //千位
  118.                 delay(5);
  119.                 write_comd(0x80+0x40+8);
  120.                 write_data(bai+0x30);//百位
  121.                 delay(5);
  122.                 write_comd(0x80+0x40+9);
  123.                 write_data(shi+0x30);        //十位
  124.                 delay(5);
  125.                 write_comd(0x80+0x40+10);
  126.                 write_data('.');
  127.                 delay(5);
  128.                 //write_comd(0x80+0x40+11);
  129.           write_data(ge+0x30);         //小數一位                        
  130.                 }
  131. void T0init()
  132.    {
  133.    TMOD=0x01;
  134.    TH0=(65536-200)/256;
  135.    TL0=(65536-200)%256;
  136.    EA=1;
  137.    ET0=1;
  138.    TR0=1;
  139.    //delay(20);
  140.    }
  141. void main()
  142.          {
  143.         
  144.           T0init();
  145.           lcd_init();
  146.             lcd_display();
  147.            while(1)
  148.            {
  149.                       adc0808_tra();
  150.               data_display();
  151.          }         
  152.          }
  153.    void timer() interrupt 1
  154.            {
  155.           TH0=(65536-200)/256;
  156.       TL0=(65536-200)%256;
  157.           CLK=~CLK;
  158.         }
復制代碼



作者: YYB_123456    時間: 2020-3-10 16:28
假如把仿真的圖文件和程序打包放上來可能會有人幫你跑一下查找原因(前提是不要下載就扣黑幣啊),這樣找出問題的所在更準確更少花時間。




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