標(biāo)題: 按鍵數(shù)字增加送顯并且將數(shù)字DA轉(zhuǎn)換從而在電壓表顯示 [打印本頁]

作者: 12.5    時間: 2018-9-12 09:03
標(biāo)題: 按鍵數(shù)字增加送顯并且將數(shù)字DA轉(zhuǎn)換從而在電壓表顯示
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define DAC0832 XBYTE[0X7FFF]   //DAC0832在系統(tǒng)中的地址為0X7FFF
#define uchar unsigned char
#define uint unsigned int
  sbit dula=P2^6;
  sbit wela=P2^7; //聲明數(shù)碼管鎖存器
  sbit key1=P2^0;
  sbit key2=P2^1;
  sbit key3=P2^2;  //聲明3個按鍵
  sbit dacs=P3^2;
  sbit dawr=P3^6;  //聲明da端口
  sbit beep=P2^4;
  uchar t,num,flag;
  uchar code table[]={0x3f,0x06,0x5b,0x4f,
                                                0x66,0x6d,0x7d,0x07,
                                                0x7f,0x6f,0x77,        0x7c,
                                                0x39,0x5e, 0x79,0x71}; //編碼數(shù)碼管字符
  void delay(uint y)        //延時ms子函數(shù)
  {
          uint i,j;
        for(i=y;i>0;i--)
                for(j=120;j>0;j--);
  }
void delayus(uint b)    //延時μS子函數(shù)
{
        while(b--)
                _nop_();
}
  void display(uchar numdis)
  {
          uchar shi,ge;
        shi=numdis/10 ;
        ge=numdis%10;            //分離個位 十位


    dula=1;
        P1=table[shi];
        dula=0;       
        wela=1;
        P1=0xfe;
        delay(5);
        wela=0;
        P1=0x00;
        delay(10);        //送十位數(shù)據(jù)


        dula=1;
        P1=table[ge];
        dula=0;       
        wela=1;
        P1=0xfd;
        delay(5);
        wela=0;   
        P1=0x00;
    delay(10);  //送個位數(shù)據(jù)
  }       

  void init()                            //初始化函數(shù)
  {
          TMOD=0X01;
        TH0=(65336-50000)/256;
        TL0=(65336-50000)%256;          //50ms 中斷一次
        EA=1;
        ET0=1;
  }                                                       

  void keyscan()
  {
          if(key1==0)                             //按下k1,自動加一
        {
                delay(10);
                if(key1==0)
                {
                while(key1)
                {beep=1;}                           //當(dāng)一直按下,蜂鳴器響
                flag=1;
                TR0=1;
                while(!key1);
                }
        }
        if(key2==0)                           //按下k2,自動減一
        {
                delay(10);
                if(key2==0)
                {
                while(key2)
                {beep=1;}                    //當(dāng)一直按下,蜂鳴器響
                flag=0;
                TR0=1;
                while(!key2);
                }
        }
         if(key3==0)                  //  按下k3,暫停
        {
                delay(10);
                if(key3==0)
                {
                while(key3)
                {beep=1;}            //當(dāng)一直按下,蜂鳴器響
                TR0=0;
                while(!key2);
                }
        }
  }
   void main()
   {
                   init();                //初始化函數(shù)
                while(1)
                {
                        dacs=0;
                        dawr=0;
                        P0=0;
                        keyscan();
                        display(num);
                DAC0832 =num;
                          delayus(10);
                }
        }
void T0_time()interrupt 1
  {
                TH0=(65336-500)/256;
                TL0=(65336-500)%256;   //重裝初值
                t++;
                if(t==20)                //20次為1s
                {
                if(flag        ==1)
                {
                        num++;
                        if(num==99)
                        num=0;
                }
                if(flag==0)         
                {
                        num--;
                           if(num==0)
                        num=99;       
                }
               
                }
  }



作者: admin    時間: 2018-9-12 16:23
需要補(bǔ)全原理圖或者詳細(xì)說明一下電路連接即可獲得100+黑幣




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