找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的DAC0832 A/D转换输出4种波形

[复制链接]
跳转到指定楼层
楼主



所有设计资料下载:
DAC0832数模转换.zip (84.94 KB, 下载次数: 111)

本设计主要用到DAC0832等芯片,输出四种波形,另外带有数码管计数波形个数。
另外主程序
#include <reg52.h>        
#include <stdio.h>
#include <math.h>      
#include <ABSACC.H>         
#define DAC0832Addr0 0x7FFF                                          //DAC0832地址  
                                         //0111 1111
#define DAC0832Addr1 0xBFFF                                          //DAC0832地址
                                         //1011 1111  
#define DAC0832Addr2 0xDFFF                                          //DAC0832地址
                                         //1101 1111
#define DAC0832Addr3 0xEFFF                                          //DAC0832地址
                                         //1110 1111  
#define DAC0832Addr 0xF7FF                                          //DAC0832地址
                                         //1111 0111
char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管显示0~9
#define uchar unsigned char                                                //uchar代表无符号字符   
#define uint unsigned int  
//sbit P10=P1^0;
sbit P21=P2^1;
sbit P22=P2^2;                               //unit代表无符号整型数据类型                                                      
void TransformData(int i,uchar c0832data);                                //数/模转换函数                  
void Delay();
//void play();                                                                        //延时函数                  
main()
{   
    int i;                                    
    uchar cDigital=0;
        uint x=0,ge,shi;
//   Uart_Init();
        P0=0xFF;                                                                        //I/O口初始化0xFF
        P1=0xFF;
        P2=0xFF;
        P3=0xFF;
        Delay();                  
                                                            
        while(1)              
        {        
                for(i=0;i<5;i++)                //产生锯齿波
                {
                    for(cDigital=0;cDigital<255;cDigital++)        //产生三角波上升沿        
                       {                       
                Delay();                          
                        TransformData(0,cDigital);         
                                             
                                   TransformData(1,cDigital);
                                if(cDigital>128)
                                {
                                                TransformData(1,255-cDigital);        
                                }   
                          
                            if(cDigital<128)   
                                {                 
                                        TransformData(2,122);  
                                }            
                                else         
                                {         
                                           TransformData(2,0);   
                                }                                             
                                    
                            if(cDigital<128)         
                                {                                   
                                        TransformData(3,125*sin((float)cDigital/255*3.14*2)-127);  
                                }
                                               
                                else                                 
                                {              
                                           TransformData(3,128*sin((float)cDigital/255*3.14*2)+127);  
                                }
//                                    
                                TransformData(4,cDigital);
                                if(cDigital==254)
                                {
                                        x++;
                                }
                                if(x==254)
                                {
                                        x=0;
                                }
                                ge=x%10;
                                shi=x/10;
                                P1=table[ge];
                                P22=1;  
                                Delay();
                                P22=1;
                                P1=table[shi];
                                P21=1;
                                Delay();
                                P21=0;
                                                                     
            }         }                          
}                                                                     
void TransformData(int i,uchar c0832data)                                //数/模转换函数
{                        
    //*((uchar xdata*)DAC0832Addr0)=c0832data;
        switch(i)                 
        {                        
           case 0: *((uchar xdata*)DAC0832Addr0)=c0832data;           break;
           case 1: *((uchar xdata*)DAC0832Addr1)=c0832data;           break;
           case 2: *((uchar xdata*)DAC0832Addr2)=c0832data;           break;
           case 3: *((uchar xdata*)DAC0832Addr3)=c0832data;           break;
           case 4: *((uchar xdata*)DAC0832Addr)=c0832data;                   break;
        }      
}  
                                                           
void Delay()                                                                        //延时1ms
{                                   
    uint i;        
           for (i=0;i<250;i++) ;         
}

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:362266 发表于 2018-6-30 14:24 | 只看该作者
我想下載這個
回复

使用道具 举报

板凳
ID:638700 发表于 2019-11-28 13:22 | 只看该作者
压缩文件格式未知或已损坏..
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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