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

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

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:210889 發(fā)表于 2017-7-3 10:41 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
display()采集的數(shù)據(jù)都能在lcd上顯示了,可是display2(是按鍵調(diào)節(jié)數(shù)值(電壓))卻不能顯示在lcd上.顯示程序我感覺沒有出錯(cuò)啊,為何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ù)做準(zhǔn)備
                ADC_CLK=1;
                Token=Token>>1;
        }
        ADC_CLK=1;
        ADC_DIN=1;
}

uint ReadADC_16BitValue(uchar channel)        //發(fā)送控制字準(zhǔn)備讀取的通道,接著讀取數(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低電平時(shí)間
                        AD16bit=AD16bit|0x01; //最低位開始
                ADC_CLK=1;
        }
        ADC_CLK=1;
        ADC_DIN=1;
        return(AD16bit);        //返回?cái)?shù)據(jù)
}

void InitADC()
{
        uchar i;
        ADC_CLK=1;
        ADC_DIN=1;
        ADC_CS=0;
        for(i=0;i<40;i++)                  //自校驗(yàn)
        {
                ADC_CLK=0;
                ADC_CLK=1;
        }
        WriteToReg_ADC(0x20);           //先寫通信寄存器,下一步時(shí)鐘寄存器
        WriteToReg_ADC(0x02);                  //100HZ   CLKIDS=0 CLKDIV=0(器件內(nèi)部頻率)
        WriteToReg_ADC(0x10);           //設(shè)置寄存器
        WriteToReg_ADC(0x44);           //自校準(zhǔn)
        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;
   //脈寬設(shè)置  Wdith         
   //占空比 X0% DutyCycle   
  //脈沖個(gè)數(shù)  count        
  // pin = ;
   k = (Width*10)/DutyCycle; //PWM整個(gè)周期

           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;
   //脈寬設(shè)置  Wdith         
   //占空比 X0% DutyCycle   
  //脈沖個(gè)數(shù)  count        
  // pin = ;
   k = (Width*10)/DutyCycle; //PWM整個(gè)周期

   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;
}
/*******************設(shè)定值與檢測(cè)值比較****************/
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);           //先寫通信寄存器,下一步時(shí)鐘寄存器
                WriteToReg_ADC(0x02);                //100HZ   CLKIDS=0 CLKDIV=0(器件內(nèi)部頻率)
                WriteToReg_ADC(0x10);          //設(shè)置寄存器
                WriteToReg_ADC(0x44);          //自校準(zhǔn)后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);
/**********************就是這個(gè)函數(shù)********************/
/*******************同樣在主循環(huán)中,display正常,但這個(gè)display2不顯示***********/

                v = Set();
                        Display2();           //Display2函數(shù)寫在主循環(huán)中但LCD卻不顯示
                Delay_1ms(5);
                compare();// 判定設(shè)定值與檢測(cè)值大小,從而輸出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]);
} */

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

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

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久国产综合 | 亚洲一区二区中文字幕在线观看 | 青青草中文字幕 | 99精品免费 | 国产一区免费 | 久久久精品一区 | 国产精品欧美日韩 | 五月婷婷 六月丁香 | 青草青草久热精品视频在线观看 | 性高朝久久久久久久3小时 av一区二区三区四区 | 一区二区三区高清 | 国产精品69毛片高清亚洲 | 欧美激情一区二区三区 | 久久久性色精品国产免费观看 | 成人一级黄色毛片 | 你懂的在线视频播放 | 一级毛片高清 | 国产精品久久久久久久久久三级 | 伊人久久综合 | 国产精品一区二区三级 | 日韩高清一区 | www.久久| 一区二区免费高清视频 | 欧美成人综合 | 日韩欧美视频在线 | 久久久久久久久久久久久9999 | 国产精品久久久久久久岛一牛影视 | 亚洲视频欧美视频 | 麻豆va | 美美女高清毛片视频免费观看 | 久久九九影视 | 97伦理最新伦理 | 97国产一区二区精品久久呦 | 午夜视频在线免费观看 | 亚洲视频二区 | 精品国产一区二区三区观看不卡 | 一区二区小视频 | 久久久久久国产精品mv | 成人午夜激情 | 日韩最新网站 | 欧洲色综合 |