找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DAC0832数模转换输出四种波形

[复制链接]
跳转到指定楼层
楼主
ID:439696 发表于 2018-12-5 23:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#include <ABSACC.H>
#include <math.h>
#include <lcd12864.h>


#define DAC0832Addr 0x7FFF                                          //DAC0832地址


#define PI 3.14159


#define uchar unsigned char                                                //uchar代表无符号字符
#define uint unsigned int                                 //unit代表无符号整型数据类型


sbit Key1=P2^0;                                                                        //定义按键 - 用来选择波形


char Wave_flag=0;                                                                  //波形标志位 0-三角波 1-锯齿波 2-方波 3-正弦波


void KeyScan(void);                                                                //按键扫描函数
void Waveform(void);                                                        //波形产生函数        
void TransformData(uchar c0832data);                        //数据转换函数 - DA输出
void delay_ms(uint i);                                                        //延时函数




void main(void)
{   
        lcdinit();                        //lcd12864初始化        
        Clear_Screen();                //清屏        
        Show_Word();                 //初始化界面


        while(1)
        {        
                KeyScan();                //按键扫描
                Waveform();                //产波函数
                Display();
        }
}


void Waveform(void)
{
        uchar cDigital=0;        


        switch(Wave_flag)
        {
        /*-- 三角波 --*/
        case 0:   
                /*-- 周期为 (255 + 255) * 1 = 510ms --*/
                for(cDigital=0;cDigital<255;cDigital++)  //产生三角波下降沿
                   {  
                        delay_ms(1);
                        TransformData(cDigital);
        }
                for(cDigital=255;cDigital>0;cDigital--)  //产生三角波上升沿
                {  
                        delay_ms(1);
                        TransformData(cDigital);
                }
                break;
        /*-- 锯齿波 --*/
        case 1:
                /*-- 周期为 255 * 2 = 510ms --*/  
                for(cDigital=255;cDigital>0;cDigital--)
                   {  
                        delay_ms(2);
                        TransformData(cDigital);
        }
                break;
        /*-- 方波 --*/        
        case 2:  
                /*-- 周期为 510ms --*/  
                cDigital=0;
                TransformData(cDigital);
                delay_ms(255);  


                cDigital=255;                  
                TransformData(cDigital);
                delay_ms(255);
                break;
        /*-- 正弦波 --*/        
        case 3:  
                /*-- 因为sin函数占用时间未知 周期未确定 --*/
                 for(cDigital=0;cDigital<100;cDigital++)
                   {  
                        TransformData( 127 * sin( (2.0 * PI * (float)cDigital) / 100 ) + 127 );
                        delay_ms(1);
        }
                break;        
        }
}


void KeyScan(void)
{
           if(Key1 == 0)  
        {
                 Wave_flag ++;        
                 while(Key1 == 0);
        }
        if(Wave_flag>3)Wave_flag=0;
}


void TransformData(uchar c0832data)                                //数/模转换函数
{
        *((uchar xdata*)DAC0832Addr)=c0832data;  
}


void delay_ms(uint i)  //延时ms函数
{
        uint j;


           for(;i>0;i--)
        {
                for(j=110;j>0;j--);
                KeyScan();        
        }
}



DAC0832.zip

97.39 KB, 下载次数: 35, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:837412 发表于 2020-11-2 15:43 来自手机 | 只看该作者
有图吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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