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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

數碼管顯示和DAC0832轉換實例

[復制鏈接]
跳轉到指定樓層
樓主
我做的一個按鍵增加數字并且DAC0832轉換調整電壓的程序,壓縮包包含proteus文件

電路原理圖如下:

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<absacc.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define DAC0832 XBYTE[0X7FFF]   //DAC0832在系統中的地址為0X7FFF
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9.   sbit dula=P2^6;
  10.   sbit wela=P2^7; //聲明數碼管鎖存器
  11.   sbit key1=P2^0;
  12.   sbit key2=P2^1;
  13.   sbit key3=P2^2;  //聲明3個按鍵
  14.   sbit dacs=P3^2;
  15.   sbit dawr=P3^6;  //聲明da端口
  16.   sbit beep=P2^4;
  17.   uchar t,num,flag;
  18.   uchar code table[]={0x3f,0x06,0x5b,0x4f,
  19.                                                  0x66,0x6d,0x7d,0x07,
  20.                                                 0x7f,0x6f,0x77,        0x7c,
  21.                                                 0x39,0x5e, 0x79,0x71}; //編碼數碼管字符
  22.   void delay(uint y)        //延時ms子函數
  23.   {
  24.           uint i,j;
  25.         for(i=y;i>0;i--)
  26.                 for(j=120;j>0;j--);
  27.   }
  28. void delayus(uint b)    //延時μS子函數
  29. {
  30.         while(b--)
  31.                 _nop_();
  32. }
  33.   void display(uchar numdis)
  34.   {
  35.           uchar shi,ge;
  36.         shi=numdis/10 ;
  37.         ge=numdis%10;            //分離個位 十位


  38.     dula=1;
  39.         P1=table[shi];
  40.         dula=0;        
  41.         wela=1;
  42.         P1=0xfe;
  43.         delay(5);
  44.         wela=0;
  45.          P1=0x00;
  46.         delay(10);        //送十位數據


  47.         dula=1;
  48.         P1=table[ge];
  49.         dula=0;        
  50.         wela=1;
  51.         P1=0xfd;
  52.         delay(5);
  53.         wela=0;   
  54.         P1=0x00;
  55.     delay(10);  //送個位數據
  56.   }        

  57.   void init()                            //初始化函數
  58.   {
  59.           TMOD=0X01;
  60.         TH0=(65336-50000)/256;
  61.         TL0=(65336-50000)%256;          //50ms 中斷一次
  62.         EA=1;
  63.         ET0=1;
  64.   }                                                        

  65.   void keyscan()
  66.   {
  67.           if(key1==0)                             //按下k1,自動加一
  68.         {
  69.                 delay(10);
  70.                 if(key1==0)
  71.                 {
  72.                 while(key1)
  73.                 {beep=1;}                           //當一直按下,蜂鳴器響
  74.                 flag=1;
  75.                 TR0=1;
  76.                 while(!key1);
  77.                 }
  78.         }
  79.         if(key2==0)                           //按下k2,自動減一
  80.         {
  81.                 delay(10);
  82.                 if(key2==0)
  83.                 {
  84.                 while(key2)
  85.                 {beep=1;}                    //當一直按下,蜂鳴器響
  86.                 flag=0;
  87.                 TR0=1;
  88.                 while(!key2);
  89.                 }
  90.         }
  91.          if(key3==0)                  //  按下k3,暫停
  92.         {
  93.                 delay(10);
  94.                 if(key3==0)
  95.                 {
  96.                 while(key3)
  97.                 {beep=1;}            //當一直按下,蜂鳴器響
  98.                 TR0=0;
  99.                 while(!key2);
  100.                 }
  101.         }
  102.   }
  103.    void main()
  104.    {
  105.                    init();                //初始化函數
  106.                 while(1)
  107.                 {
  108.                         dacs=0;
  109.                         dawr=0;
  110.                         P0=0;
  111.                         keyscan();
  112.                         display(num);
  113.                 DAC0832 =num;
  114.                           delayus(10);
  115.                 }
  116.         }
  117. void T0_time()interrupt 1
  118.   {
  119.                 TH0=(65336-500)/256;
  120.                 TL0=(65336-500)%256;   //重裝初值
  121.                 t++;
  122.                 if(t==20)                //20次為1s
  123.                 {
  124.                 if(flag        ==1)
  125.                 {
  126.                         num++;
  127.                         if(num==99)
  128.                         num=0;
  129.                 }
  130.                 if(flag==0)         
  131.                 {
  132.                         num--;
  133.                            if(num==0)
  134.                         num=99;        
  135.                 }
  136.                
  137.                 }
  138.   }
復制代碼

DA轉換實例.zip

29.23 KB, 下載次數: 34, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:235285 發表于 2022-3-14 10:11 | 只看該作者
學習了,剛好想學這兩個的內容
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久精品网站 | 国产ts人妖另类 | 成人在线视频网 | 免费观看国产视频在线 | a欧美 | 精品国产乱码久久久久久蜜柚 | www.色综合 | 亚洲成人精品 | 国产在线视频一区 | h片在线免费观看 | 成人在线免费网站 | 久久亚洲欧美日韩精品专区 | 99re6在线视频精品免费 | 成人在线黄色 | 久久精品国产精品青草 | 一级做a爰片性色毛片16美国 | 国产高清在线观看 | 午夜一级大片 | 欧美激情精品久久久久久变态 | 久久av一区二区三区 | 国产精品国产成人国产三级 | 亚洲一区av在线 | 美女精品一区 | 成人在线中文字幕 | 孰女乱色一区二区三区 | 亚洲精品在线视频 | 久久久久九九九女人毛片 | 一级网站| 激情在线视频网站 | 一级黄色片免费 | 精品国产视频 | 成人av一区 | 免费人成激情视频在线观看冫 | 成人a视频在线观看 | 99re6在线 | 国产成人午夜高潮毛片 | 一区二区三区四区在线 | 欧美一二区 | 亚洲a在线观看 | 精品一区二区三区在线播放 | 日韩高清三区 |