找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7292|回复: 4
收起左侧

模数转换芯片DAC0832产生锯齿波 三角波发生器 proteus仿真及源码

[复制链接]
ID:137190 发表于 2016-10-10 16:16 | 显示全部楼层 |阅读模式
51单片机驱动模数转换芯片DAC0832产生锯齿波 三角波的proteus仿真原理图:
0.png
单片机源程序:
  1. /********************************************************************
  2. 51黑电子论坛
  3. *********************************************************************/
  4. #include<reg52.h>                 //库文件
  5. #define uchar unsigned char//宏定义无符号字符型
  6. #define uint unsigned int  //宏定义无符号整型
  7. /********************************************************************
  8.                             初始定义
  9. *********************************************************************/
  10. sbit P3_2=P3^2;
  11. sbit P3_3=P3^3;
  12. unsigned char keycnt=0;
  13. unsigned char tcnt=0; //键值判断
  14. bit sjz=0; //产生三角波时用到的标志

  15. void delayl() //延时子程序
  16. {
  17.         unsigned char i,j;
  18.         for(i=20;i>0;i--)
  19.         for(j=248;j>0;j--);
  20. }

  21. void KEY() //按键扫描程序
  22. {
  23.   if(P3_2==0)
  24.   {
  25.     delayl(); //延时跳过按下时的抖动
  26.     if(P3_2==0)
  27.     {                     
  28.      keycnt=0; //定时器产生锯齿波标志
  29.      TR0=0; //暂时停止波形输出
  30.      TH0=0x256-40; //对TH0 TL0 赋值
  31.      TL0=0x256-40;
  32.      TR0=1; //开始定时,产生锯齿波
  33.      while(P3_2==0); //如果一直按着键,则等待松键开
  34.      delayl(); //延时跳过松开后的抖动
  35.     }
  36.    }

  37.   if(P3_3==0)
  38.   {
  39.     delayl(); //延时跳过按下时的抖动
  40.     if(P3_3==0)
  41.     {
  42.      keycnt=1; //定时器产生三角波标志
  43.      TR0=0; //暂时停止波形输出
  44.      TH0=0x256-40; //对TH0 TL0 赋值
  45.      TL0=0x256-40;
  46.      TR0=1; //开始定时 产生三角波
  47.      }
  48.    while(P3_2==0); //如果一直按着键,则等待松键开
  49.    delayl(); //延时跳过松开后的抖动
  50. }
  51. }

  52. void t0(void) interrupt 1 using 0 //定时中断服务函数
  53. {
  54.    if(keycnt==0) //产生锯齿波
  55.    {
  56.      P0=tcnt;
  57.      tcnt=+0x0a; //步进0.2V/一次中断
  58.      if(tcnt==0xfb)
  59.        tcnt=0;
  60.    }

  61.    if(keycnt==1) //产生三角波
  62.    {
  63.      if(sjz==0)
  64.      {
  65.        P0=tcnt;
  66.        tcnt=+0x0a;//步进0.2V/一次中断
  67.        if(tcnt==0xfa)
  68.          sjz=1;
  69.       }
  70.       if(sjz==1)
  71.       {
  72.        P0=tcnt;
  73.        tcnt=-0x0a;
  74.        if(tcnt==0)                     
  75.        sjz=0;
  76.      }
  77.     }
  78. }
  79. void main(void)
  80. {
  81.   TMOD=0x02; //定时器工作在方式2
  82.   ET0=1;
  83.   EA=1;
  84.   while(1)
  85.    KEY();
  86. }
复制代码
0.png


仿真工程文件及所有完整程序等资料下载地址(压缩包一共有45个单片机仿真,全部下载后找到第013个项目即可):
http://www.51hei.com/bbs/dpj-56298-1.html
回复

使用道具 举报

ID:121114 发表于 2016-11-2 22:44 | 显示全部楼层
示波器呢?
回复

使用道具 举报

ID:425369 发表于 2018-11-12 23:00 来自手机 | 显示全部楼层
可以使用吗
回复

使用道具 举报

ID:573415 发表于 2020-3-13 13:58 | 显示全部楼层
示波器呢。。?
回复

使用道具 举报

ID:1080159 发表于 2023-5-28 01:22 来自手机 | 显示全部楼层
示波器:没我也可以有波?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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