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

標題: 有一段display函數在lcd上不顯示,其他都正常,why? [打印本頁]

作者: LIPPPP    時間: 2017-7-3 10:41
標題: 有一段display函數在lcd上不顯示,其他都正常,why?
display()采集的數據都能在lcd上顯示了,可是display2(是按鍵調節數值(電壓))卻不能顯示在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 )                //發送控制字
{
        uint AD16bit,Token;
        uchar i;
        ADC_CLK=1;
        ADC_CS=0;
        Token=0x80;
        AD16bit=byteword;
        for(i=0;i<8;i++)
        {
                if(AD16bit&Token) // 逐一取出各位上的數據
                        ADC_DIN=1;
                else
                        ADC_DIN=0;
                ADC_CLK=1;
                ADC_CLK=0; //為發送數據做準備
                ADC_CLK=1;
                Token=Token>>1;
        }
        ADC_CLK=1;
        ADC_DIN=1;
}

uint ReadADC_16BitValue(uchar channel)        //發送控制字準備讀取的通道,接著讀取數據
{
        uint AD16bit;
        uchar i;
        WriteToReg_ADC(0x38|channel);
        while(ADC_DRDY==1);          // 等待DRDY下降沿讀數據
        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);        //返回數據
}

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(器件內部頻率)
        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   
  //脈沖個數  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   
  //脈沖個數  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調節電壓************/
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(器件內部頻率)
                WriteToReg_ADC(0x10);          //設置寄存器
                WriteToReg_ADC(0x44);          //自校準后DRDY返回低電平                        
                Delay_1ms(60);       
                        
                for(i=0;i<8;i++)   //讀取數據并轉換成電壓
                {
                  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);
/**********************就是這個函數********************/
/*******************同樣在主循環中,display正常,但這個display2不顯示***********/

                v = Set();
                        Display2();           //Display2函數寫在主循環中但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函數*********************/

void Display2()
{  v = Set();
    lcd_pos(0x13);
        lcd1602writedata((v/10)+0x30);
    lcd1602writedata(0x2e);
        lcd1602writedata((v%10)+0x30);
}
作者: LIPPPP    時間: 2017-7-3 11:11
靠找到了. 寫了lcd_pos(0x13)這是錯的位置, 應該是在lcd_pos(0x0d),真是被自己蠢哭




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 狠狠干狠狠操 | 亚洲黄色精品 | 精品一二区 | 日韩一区二区在线播放 | 九九九九精品 | 天天躁日日躁狠狠躁 | 狠狠干美女 | 亚洲欧美视频在线观看 | 亚洲色综合| 国产精品一区二区三区免费 | 天堂网在线资源 | 特黄一级毛片 | 亚洲精品一区中文字幕乱码 | 一区二区视频网站 | 国产三级一区 | 欧美黄色一区二区 | 免费看a| 中文字幕av久久爽一区 | 国产欧美综合一区二区三区 | 99久热| av在线资源| 草草在线观看 | 国产免费黄色 | 亚洲h片| 中文字幕日韩一区 | 婷婷久久五月天 | 久久免费高清视频 | 国内精品国产成人国产三级 | 色婷婷在线视频 | 久久夜色精品国产欧美乱极品 | 成人羞羞网站 | 午夜精品久久 | 91麻豆精品国产91久久久久久 | 正在播放国产精品 | 欧美日韩综合在线 | 免费av一区二区 | 成人影片在线 | 欧美性爽 | 依人久久 | 一区二区三区网站 | 日韩一区二区av |