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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1992|回復: 1
打印 上一主題 下一主題
收起左側

有一段display函數(shù)在lcd上不顯示,其他都正常,why?

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:210889 發(fā)表于 2017-7-3 10:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
display()采集的數(shù)據(jù)都能在lcd上顯示了,可是display2(是按鍵調(diào)節(jié)數(shù)值(電壓))卻不能顯示在lcd上.顯示程序我感覺沒有出錯啊,為何display可以顯示,但display2就顯示不了

   #include<reg52.h>
#include"lcd.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit P1_6 = P1^6;
sbit P1_7 = P1^7;
sbit ADC_CS=P1^0;
sbit ADC_CLK=P1^1;
sbit ADC_DIN=P1^2;
sbit ADC_DOUT=P1^3;
sbit ADC_DRDY=P1^4;
uchar t = 0,c = 0,k,v =53;//k為脈沖周期
sbit S1 = P3^5;
sbit S2 = P3^4;
uchar date[3]={0,0,0};
uint result0[8]={0,0,0,0,0,0,0,0};
uint result1[8]={0,0,0,0,0,0,0,0};


void Display(uint AD_data);
void Display1(uint AD_data);
void Display2();
void PWM_Control1( uchar Width, uchar DutyCycle,uchar count,uchar partern);
void PWM_Control2( uchar Width, uchar DutyCycle,uchar count,uchar partern);

void Delay_1ms(uint c)
{
        uchar a,b;
        for(;c>0;c--)
        {
                for(b=199;b>0;b--)
                {
                        for(a=1;a>0;a--);
                }
        }
}

void WriteToReg_ADC(uint byteword )                //發(fā)送控制字
{
        uint AD16bit,Token;
        uchar i;
        ADC_CLK=1;
        ADC_CS=0;
        Token=0x80;
        AD16bit=byteword;
        for(i=0;i<8;i++)
        {
                if(AD16bit&Token) // 逐一取出各位上的數(shù)據(jù)
                        ADC_DIN=1;
                else
                        ADC_DIN=0;
                ADC_CLK=1;
                ADC_CLK=0; //為發(fā)送數(shù)據(jù)做準備
                ADC_CLK=1;
                Token=Token>>1;
        }
        ADC_CLK=1;
        ADC_DIN=1;
}

uint ReadADC_16BitValue(uchar channel)        //發(fā)送控制字準備讀取的通道,接著讀取數(shù)據(jù)
{
        uint AD16bit;
        uchar i;
        WriteToReg_ADC(0x38|channel);
        while(ADC_DRDY==1);          // 等待DRDY下降沿讀數(shù)據(jù)
        ADC_CLK=1;
        ADC_CS=0;
        AD16bit=0x00;
        for(i=0;i<16;i++)  //巡歷
        {
                AD16bit=AD16bit<<1;
                ADC_CLK=0;
                if(ADC_DOUT==1)          //等待DRDY低電平時間
                        AD16bit=AD16bit|0x01; //最低位開始
                ADC_CLK=1;
        }
        ADC_CLK=1;
        ADC_DIN=1;
        return(AD16bit);        //返回數(shù)據(jù)
}

void InitADC()
{
        uchar i;
        ADC_CLK=1;
        ADC_DIN=1;
        ADC_CS=0;
        for(i=0;i<40;i++)                  //自校驗
        {
                ADC_CLK=0;
                ADC_CLK=1;
        }
        WriteToReg_ADC(0x20);           //先寫通信寄存器,下一步時鐘寄存器
        WriteToReg_ADC(0x02);                  //100HZ   CLKIDS=0 CLKDIV=0(器件內(nèi)部頻率)
        WriteToReg_ADC(0x10);           //設置寄存器
        WriteToReg_ADC(0x44);           //自校準
        WriteToReg_ADC(0x21);           //通道2
        WriteToReg_ADC(0x02);
        WriteToReg_ADC(0x11);
        WriteToReg_ADC(0x44);
        Delay_1ms(50);         
}



void PWM_Control1( uchar Width, uchar DutyCycle,uchar count,uchar partern)  //1ms為最小單位
{        uchar i,j;
   //脈寬設置  Wdith         
   //占空比 X0% DutyCycle   
  //脈沖個數(shù)  count        
  // pin = ;
   k = (Width*10)/DutyCycle; //PWM整個周期

           if(partern == 6)
  {
     for(i=0;i<k*count;i++)
           {
             P1_6= 0;
                 delay(Width);
                 P1_6= 1;
                 delay(k-Width);
           }
  }
    if(partern == 7)
        {
         for(j=0;j<k*count;j++)
          {
            P1_7 = 0;
                delay(Width);
                P1_7 = 1;
                delay(k-Width);
          }
         }
}

void PWM_Control2( uchar Width, uchar DutyCycle,uchar count,uchar partern)  //1ms為最小單位
{         uchar i,j;
   //脈寬設置  Wdith         
   //占空比 X0% DutyCycle   
  //脈沖個數(shù)  count        
  // pin = ;
   k = (Width*10)/DutyCycle; //PWM整個周期

   if(partern == 6)
   {
   for(i=0;i<k*count;i++)
           {
             P1_6= 0;
                 delay(Width);
                 P1_6= 1;
                 delay(k-Width);
           }
    }
         if(partern == 7)
         {
           for(j=0;j<k*count;j++)
           {
             P1_7= 0;
                 delay(Width);
                 P1_7= 1;
                 delay(k-Width);
           }
         }       
}


/***************按鍵S1,S2調(diào)節(jié)電壓************/
unsigned int Set()
{
   if( S1 == 0)
    {
          delay(5);
          if(S1 == 0)
          {
            v++;
                }
        }
         if(S2 == 0)
          {
                   delay(5);
                if(S2 == 0)
                 {
                   v--;
                   }
          }
          return v;
}
/*******************設定值與檢測值比較****************/
void compare()
{
   if(v<50)PWM_Control1(7,7,1,7);else PWM_Control2(7,7,1,6);
}

void main()
{       
uchar i;
        ulong sum=0;
        uint result;
        float h;
        lcd1602init();
        InitADC();
//        v = Set();
        lcd_pos(0x00);
        lcd1602writedata('V');
        lcd1602writedata('=');
        lcd1602writedata(5+0x30);
        lcd1602writedata(0x2e);
        lcd1602writedata(0x30);
        lcd1602writedata(0x30);
        lcd1602writedata('V');
        lcd_pos(0x08);
        lcd1602writedata('S');
        lcd1602writedata('e');       
        lcd1602writedata('t');       
        lcd1602writedata('=');
/*        lcd1602writedata((v/10)+0x30);
    lcd1602writedata(0x2e);
        lcd1602writedata((v%10)+0x30);         */
        lcd_pos(0x40);
        lcd1602writedata('T');
        lcd1602writedata('e');
        lcd1602writedata('s');
        lcd1602writedata('t');
        lcd1602writedata('=');
        while(1)
        {       
                WriteToReg_ADC(0x20);           //先寫通信寄存器,下一步時鐘寄存器
                WriteToReg_ADC(0x02);                //100HZ   CLKIDS=0 CLKDIV=0(器件內(nèi)部頻率)
                WriteToReg_ADC(0x10);          //設置寄存器
                WriteToReg_ADC(0x44);          //自校準后DRDY返回低電平                        
                Delay_1ms(60);       
                        
                for(i=0;i<8;i++)   //讀取數(shù)據(jù)并轉(zhuǎn)換成電壓
                {
                  result0[i]=ReadADC_16BitValue(0);
                  sum=sum+result0[i];
                }
                sum=sum/8;
                result=(uint)sum;
                sum=0;          
                h=result;
                result=h*5000/65536;
               
                Display(result);
       
                result=0;
                Delay_1ms(50);
/**********************就是這個函數(shù)********************/
/*******************同樣在主循環(huán)中,display正常,但這個display2不顯示***********/

                v = Set();
                        Display2();           //Display2函數(shù)寫在主循環(huán)中但LCD卻不顯示
                Delay_1ms(5);
                compare();// 判定設定值與檢測值大小,從而輸出PWM1或PWM2 (P1^6或P1^7)
                Delay_1ms(5);       
       
               
               
               
        //        Delay_1ms(500);
               
        /*        WriteToReg_ADC(0x21);
                WriteToReg_ADC(0x02);
                WriteToReg_ADC(0x11);
                WriteToReg_ADC(0x44);
                Delay_1ms(60);
                 for(i=0;i<8;i++)
                {
                  result1[i]=ReadADC_16BitValue(1);
                  sum=sum+result1[i];
                }
                sum=sum/8;
                result=(uint)sum;
                sum=0;               
                h=result;
                result=h*5000/65536;
                Display1(result);
                result=0;
        //        Delay_1ms(500);          */       
        }
}

void Display(uint AD_data)
{       
        date[2]= (AD_data)/1000;
        date[1]= (AD_data)/100%10;
        date[0]= (AD_data)/10%10;
       
lcd_pos(0x45);
       
        lcd1602writedata(0x30+date[2]);
        lcd1602writedata(0x2e);
        lcd1602writedata(0x30+date[1]);
       
        lcd1602writedata(0x30+date[0]);
        lcd1602writedata('V');
}

/*void Display1(uint AD_data)
{
        date[2]= (AD_data)/1000;
        date[1]= (AD_data)/100%10;
        date[0]= (AD_data)/10%10;

lcd_pos(0x49);

        lcd1602writedata(0x30+date[2]);
        lcd1602writedata(0x2e);
        lcd1602writedata(0x30+date[1]);
       
        lcd1602writedata(0x30+date[0]);
} */

/****************就是這個Display2函數(shù)*********************/

void Display2()
{  v = Set();
    lcd_pos(0x13);
        lcd1602writedata((v/10)+0x30);
    lcd1602writedata(0x2e);
        lcd1602writedata((v%10)+0x30);
}

評分

參與人數(shù) 1黑幣 +5 收起 理由
xiaoguo666 + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:210889 發(fā)表于 2017-7-3 11:11 | 只看該作者
靠找到了. 寫了lcd_pos(0x13)這是錯的位置, 應該是在lcd_pos(0x0d),真是被自己蠢哭
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本亚洲精品 | 中文字幕成人av | 一区二区成人 | 欧美色综合天天久久综合精品 | 亚洲精品一区二区三区蜜桃久 | 一区二区三区在线播放 | 国产一区二区在线免费观看 | 天天爽天天干 | 色吧色综合 | 可以免费观看的av片 | 中文字幕精品视频 | 亚洲乱码一区二区 | 国产高清在线 | 欧美一级欧美一级在线播放 | 中文字幕在线一区二区三区 | 69性欧美高清影院 | 北条麻妃一区二区三区在线视频 | 精品一区二区视频 | 久久精品视频一区二区 | 日本一区不卡 | 在线亚洲一区 | 99精品久久久国产一区二区三 | 中文字幕在线人 | 九九热最新地址 | 久久久xxx| 91高清视频在线观看 | 阿v视频在线观看 | 自拍偷拍一区二区三区 | 午夜精品影院 | 成人教育av | 日日噜噜夜夜爽爽狠狠 | 一区二区福利视频 | 日韩精品久久 | 日韩在线视频免费观看 | 男人天堂久久 | 日韩中文在线观看 | 午夜免费看 | 欧美国产精品久久久 | 亚洲人人 | 中文字幕人成乱码在线观看 | 久久精品免费看 |