找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1338|回复: 1
打印 上一主题 下一主题
收起左侧

proteus 示波器和keil c代码结合能同时发出至少4种不同的波形吗?

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg51.h>
  2. #include<math.h>
  3. #include<absacc.h>
  4. #define LTC1451 XBYTE[0xfaff]                   //设置LTC1451的访问地址
  5. #define DAC1 XBYTE[0xfbff]                      //1# DAC输入锁存器的地址
  6. #define DAC2 XBYTE[0xfcff]
  7. #define DAC3 XBYTE[0xfdff]                      //3# DAC输入锁存器的地址
  8. #define DAC4 XBYTE[0xfeff]
  9. #define DAOUT XBYTE[0xffff]                     //DAC寄存器的共同地址
  10. sbit din=P3^0;                                  //定义芯片引脚变量
  11. sbit clk=P3^1;
  12. sbit cs=P3^2;
  13. sbit P1_7=P1^7;
  14. sbit P1_0=P1^0;
  15. sbit P1_1=P1^1;
  16. sbit P1_2=P1^2;
  17. sbit P1_3=P1^3;
  18. #define PI 3.1415

  19. void delay(unsigned int time){
  20.         unsigned int j=0;
  21.         for(;time>0;time--)
  22.                 for(j=0;j<125;j++);
  23.                 }

  24. void da(unsigned int value);
  25. void main(){
  26. unsigned int num1,num2,num3,num4,value;
  27.         while(1){
  28. if(P1^0==0){
  29.         delay(10);
  30.         if(P1^0==0){
  31. for(num1=180;num1<360;num1++){        //负半周正弦波形
  32. value=2047 + 2047*sin((float)num1/180*PI);
  33. da(value);
  34. }
  35. }}

  36. if(P1^1==0){                            //正弦?
  37.         delay(10);
  38.         if(P1^1==0){
  39.         for(num2=0;num2<360;num2++)
  40.         value=127+127*sin((float)num2/180*PI);
  41. }
  42. }
  43. if(P1^2==0){
  44. delay(10);                                    //三角波
  45.         if(P1^2==0){
  46.         for(num3=0;num3<225;num3++)              //上升段波形
  47.         LTC1451=num3;
  48.         for(num3=225;num3>0;num3--)              //下降段波形
  49.         LTC1451=num3;
  50. }
  51. }
  52. if(P1^3==0){
  53.         delay(10);
  54.         if(P1^3==0){
  55.         for(num4=0;num4<255;num4++){
  56.                 DAC3=num4;                            //上锯齿送入1 #DAC
  57.                 DAC4=255-num4;                        //下锯齿送入2 #DAC
  58.                 DAOUT=num4;                           //两路同时进行D/A转换输出
  59.         }
  60. }
  61. }
  62. }
  63.         da(value);
  64. }

  65. void da(unsigned int v){                    //DA转换
  66. char i=11;
  67. cs=1;
  68. cs=0;                                             //CS引脚置高电平
  69. for(;i>=0;i--){
  70. din=(v>>i)& 0x01;                            //分解并行数据,串行送入DIN引脚
  71. clk=1;                                            //发生时钟脉冲
  72. clk=0;
  73. }
  74. cs=1;                                             //发出第13个脉冲
  75. cs=0;                                             //CS引脚置低电平
  76. }
复制代码
代码有问题,有哪位大神看看什么问题,有代码再好不过了!!!!!!
        da(value);有一处警告,不碍事吧。


1.png (44.79 KB, 下载次数: 33)

例如类似这样

例如类似这样
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:648281 发表于 2019-12-14 22:06 | 只看该作者
你好!
如果同时输出四种波形,需要四路独立输出才可
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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