找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8790|回复: 23
收起左侧

51单片机+pcf8591的多波形发生器仿真程序(正弦波 三角波等可调)

  [复制链接]
ID:422531 发表于 2019-4-17 19:38 | 显示全部楼层 |阅读模式
里面有代码   有仿真

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

单片机源程序如下:
  1. #include "PCF8591.h"
  2. #include "delay.h"


  3. sbit SCL=P2^1;  //串行时钟输入端  
  4. sbit SDA=P2^0;  //串行数据输入端
  5. uchar flag=0;

  6. void start()//开始信号  
  7. {  
  8.     SDA=1;  
  9.     delay();  
  10.     SCL=1;  
  11.     delay();  
  12.     SDA=0;  
  13.     delay();  
  14. }  
  15.   
  16. void stop() //停止信号  
  17. {  
  18.     SDA=0;  
  19.     delay();  
  20.     SCL=1;  
  21.     delay();  
  22.     SDA=1;  
  23.     delay();  
  24. }  
  25.   
  26.   
  27. void respons()//应答    相当于一个智能的延时函数  
  28. {  
  29.     uchar i;  
  30.     SCL=1;  
  31.     delay();  
  32.     while((SDA==1)&&(i<250))  
  33.         i++;  
  34.     SCL=0;  
  35.     delay();  
  36. }  
  37.   
  38. void init() //初始化  
  39. {  
  40.     SDA=1;  
  41.     delay();  
  42.     SCL=1;  
  43.     delay();      
  44. }  
  45.   
  46. void write_byte(uchar date) //写一字节数据  
  47. {  
  48.     uchar i,temp;  
  49.     temp=date;  
  50.     for(i=0;i<8;i++)  
  51.     {  
  52.         temp=temp<<1; //左移一位 移出的一位在CY中  
  53.         SCL=0;          //只有在scl=0时sda能变化值  
  54.         delay();  
  55.         SDA=CY;  
  56.         delay();  
  57.         SCL=1;  
  58.         delay();         
  59.     }     
  60.     SCL=0;  
  61.     delay();  
  62.     SDA=1;  
  63.     delay();  
  64. }  
  65.   
  66.   
  67.   
  68. void write_add(uchar control,uchar date)  
  69. {  
  70.     start();  
  71.     write_byte(PCF8591);    //10010000  前四位固定 接下来三位全部被接地了 所以都是0 最后一位是写 所以为低电平  
  72.     respons();  
  73.     write_byte(control);  
  74.     respons();  
  75.     write_byte(date);  
  76.     respons();  
  77.     stop();  
  78.   
  79. }  
复制代码
  1. #include "wave.h"  
  2. #include "PCF8591.h"
  3. #include "delay.h"


  4. uchar time1;
  5. uchar a,range=100;  
  6. void  triangular(void)        //三角波
  7.    {
  8.         write_add(0x40,a);  
  9.         delay_1ms(time1);  
  10.         a++;  
  11.         if(a>range)
  12.                 while(a>0)  
  13.         {       
  14.                         a--;
  15.                         write_add(0x40,a);  
  16.                         delay_1ms(time1);
  17.                 }
  18.        
  19.                          
  20.   }

  21.   void  triangular1(void)//锯齿波
  22.    {
  23.         write_add(0x40,a);  
  24.         delay_1ms(time1);  
  25.         a++;  
  26.         if(a>range)  
  27.             a=0;
  28.   }
  29.   void square(void)           //方波
  30. {
  31.         a=range;
  32.                   write_add(0x40,a);
  33.         delay_1ms(time1);
  34.                 a=0;
  35.                   write_add(0x40,a);
  36.         delay_1ms(time1);
  37. }
复制代码


所有资料51hei提供下载:
波形发生器protues仿真 PCF8591仿真源程序 正弦波 三角波等可调.zip (123.62 KB, 下载次数: 468)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:500108 发表于 2019-4-18 06:17 | 显示全部楼层
谢谢分享学习
回复

使用道具 举报

ID:272767 发表于 2019-4-18 10:47 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:515752 发表于 2019-4-18 19:23 | 显示全部楼层
优秀优秀
回复

使用道具 举报

ID:494774 发表于 2019-4-19 14:08 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:555406 发表于 2019-6-5 12:17 | 显示全部楼层
这个是怎么操作的
回复

使用道具 举报

ID:555406 发表于 2019-6-5 12:45 | 显示全部楼层
怎么操作的
回复

使用道具 举报

ID:424041 发表于 2019-6-6 15:27 | 显示全部楼层
有没有输出正弦波的程序???
回复

使用道具 举报

ID:422531 发表于 2019-6-10 18:45 | 显示全部楼层
jjue@foxmail.co 发表于 2019-6-6 15:27
有没有输出正弦波的程序???

有  只输出正弦波的话 可用单片机+PCF8591再加一些外部电路即可  外部电路就是低通滤波这类
回复

使用道具 举报

ID:422531 发表于 2019-6-10 18:46 | 显示全部楼层
ywdmas 发表于 2019-6-5 12:17
这个是怎么操作的

什么怎么操作  能问的更加有目的性一点么?
回复

使用道具 举报

ID:565726 发表于 2019-6-19 09:01 来自手机 | 显示全部楼层
这里面protues仿真没有
回复

使用道具 举报

ID:565726 发表于 2019-6-19 11:37 来自手机 | 显示全部楼层
xrdzxcvbnm 发表于 2019-6-19 09:01
这里面protues仿真没有

看错了,有仿真,谢谢了,
回复

使用道具 举报

ID:565726 发表于 2019-6-24 23:16 来自手机 | 显示全部楼层
里面仿真没正弦波三角波,只有一个方波
回复

使用道具 举报

ID:425175 发表于 2019-10-12 16:07 | 显示全部楼层
楼主厉害
请问楼主,想要产生锯齿波,应该怎么写代码?
回复

使用道具 举报

ID:634666 发表于 2019-11-5 08:22 来自手机 | 显示全部楼层
怎么没人分享红外密码锁的教程啊
回复

使用道具 举报

ID:657626 发表于 2019-12-7 14:57 来自手机 | 显示全部楼层
谢谢分享,很有用处!
回复

使用道具 举报

ID:657626 发表于 2019-12-7 14:59 来自手机 | 显示全部楼层
楼主可以回复下吗,这个产生正弦波,需要外接放大电路吗,程序该怎么写
回复

使用道具 举报

ID:649179 发表于 2019-12-8 15:17 | 显示全部楼层
仿真 在哪里?
回复

使用道具 举报

ID:649179 发表于 2019-12-8 15:26 | 显示全部楼层
xrdzxcvbnm 发表于 2019-6-19 11:37
看错了,有仿真,谢谢了,

在哪里呀 麻烦告知一下啊谢谢
回复

使用道具 举报

ID:787260 发表于 2020-6-23 02:00 | 显示全部楼层
楼主厉害,想问一下锯齿波怎么编写,
回复

使用道具 举报

ID:787594 发表于 2020-6-23 18:20 来自手机 | 显示全部楼层
优秀,仿真里面函数是不是不全
回复

使用道具 举报

ID:794069 发表于 2020-7-1 15:57 | 显示全部楼层
里面有说明吗,代码的之类的
回复

使用道具 举报

ID:868488 发表于 2020-12-26 22:35 | 显示全部楼层
有没有输出正弦波的程序???
回复

使用道具 举报

ID:321836 发表于 2021-5-28 11:47 | 显示全部楼层
把按键定义去掉了,仿真不太方便,不过能用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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