找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3443|回复: 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 单片机教程网

快速回复 返回顶部 返回列表