#include "reg52.h"

#include

#define ADC_PORT P2 //如图,ADC0832连接端口

//老师要求的5种波

#define W_SINE 0

#define W_SQU 1

#define W_TRI 2

#define W_TRA 3

#define W_SAW 4

#define PI 3.1415926f //圆周率好像是这个数

//简化类型符写法

typedef unsigned char u8;

typedef unsigned int u16;

typedef unsigned long u32;

sbit ADC_CS_WR=P3^0; //如图,ADC0832使能口

//老师要求的5个LED,接P0口

sbit LED0=P0^0;

sbit LED1=P0^1;

sbit LED2=P0^2;

sbit LED3=P0^3;

sbit LED4=P0^4;

//图给出的5个按键

sbit KEY0=P1^0;

sbit KEY1=P1^1;

sbit KEY2=P1^2;

sbit KEY3=P1^3;

sbit KEY4=P1^4;

//全局变量

u8 mode;//模式:正弦波……

u16 freq;//频率

u8 time;//计次参数

u8 AM;//调幅

void Timer0Init(void);

void scanKey(void);

void sys_init(void);

void sine_wave(u8 location);//正弦波

void squ_wave(u8 location);//方……

void tri_wave(u8 location);//三……

void tra_wave(u8 location);//梯……

void saw_wave(u8 location);//锯……

void Timer0Init(void)                //100微秒@12.000MHz

{

TMOD &= 0xF0;                //设置定时器模式

TMOD |= 0x02;                //设置定时器模式

TL0 = 0x9C;                //设置定时初值

TH0 = 0x9C;                //设置定时重载值

TF0 = 0;                //清除TF0标志

TR0 = 1;                //定时器0开始计时

EA = 1;         //开总中断

ET0 = 1;        //开定时器0中断

}

void scanKey(void)//按键扫描

{

if(KEY0==0)

{

mode=0;

P0=0xFF;//灭所有灯

LED0=0;

}

if(KEY1==0)

{

mode=1;

P0=0xFF;//灭所有灯

LED1=0;

}

if(KEY2==0)

{

mode=2;

P0=0xFF;//灭所有灯

LED2=0;

}

if(KEY3==0)

{

mode=3;

P0=0xFF;//灭所有灯

LED3=0;

}

if(KEY4==0)

{

mode=4;

P0=0xFF;//灭所有灯

LED4=0;

}

}

void sys_init(void)//系统初始化

{

time=0;

ADC_CS_WR=0;

ADC_PORT=0;

mode=0;//默认输出正弦波

freq=100;//默认频率100Hz

AM=255;//最大幅度

}

void sine_wave(u8 location)//输出正弦波

{

double x=(double)location/50*PI;//把0-100放缩到0-2派(pai,没有那个符号,好难受(╯﹏╰))

u8 y=(sin(x)*(AM/2)+(AM/2));//算出y,并放缩到0-254(因为ADC范围0-AM,感觉这个芯片好落后)

ADC_PORT=y;

}

void squ_wave(u8 location)//方……

{

if(location<50)

ADC_PORT=AM;

else

ADC_PORT=0x0;//这个好简单

}

void tri_wave(u8 location)//三……

{

//为了简化,在单周期输出V字形

u8 y;

if(location<50)

y=(50-location)*AM/50;

else

y=(location-50)*AM/50;

ADC_PORT=y;

//偶函数,信不?当然你说奇函数也没错

}

void tra_wave(u8 location)//梯……

{

u8 y;

if(location<25)

y=0xFF;

else if(location<50)

y=(50-location)*AM/25;

else if(location<75)

y=0;

else

y=(location-75)*AM/25;

ADC_PORT=y;

}

void saw_wave(u8 location)//锯……

{

ADC_PORT=location*AM/100;

//用(100-location)也以变成反向锯齿

}

void Timer0Work() interrupt 1 //中断服务函数

{

switch(mode)

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

51单片机c语言dac0832产生波形,单片机DAC0832波形发生器实验报告相关推荐

  1. 51单片机c语言试题及答案,单片机C语言期末考试题..

    单片机C语言期末考试题..,单片机的c语言应用程序设计,单片机c语言编程,51单片机c语言程序100例,单片机c语言,单片机c语言编程思想,c语言开发单片机,c语言单片机程序,新概念51单片机c语言教 ...

  2. 沈航C语言上机实验题答案,大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc...

    大学大一c语言程序设计实验室上机题全部代码答案(实验报告) C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hell ...

  3. 北京电大c语言实验作业二,大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc...

    大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc C语言实验报告实验1-1:helloworld程序:源代码:#includemain(){printf("hellowor ...

  4. 51单片机c语言试题及答案,单片机考试复习题及答案

    <单片机考试复习题及答案>由会员分享,可在线阅读,更多相关<单片机考试复习题及答案(14页珍藏版)>请在人人文库网上搜索. 1.选择题1.主频为12MHz的单片机他的机器周期为 ...

  5. 单片机c语言 i%3c%3c1,单片机C语言作业及上机习题及答案

    <单片机C语言作业及上机习题及答案>由会员分享,可在线阅读,更多相关<单片机C语言作业及上机习题及答案(37页珍藏版)>请在人人文库网上搜索. 1.第一次课熟悉winTC编译环 ...

  6. 单片机c语言模块化实例程序设计,单片机C语言模块化设计

    原标题:单片机C语言模块化设计 keil中实现 模块化编程.doc 在使用 KEIL 的时候,我们习惯上在一个.c 的文件中把自己要写的东西按照 自己思路的顺序进行顺序书写.这样是很普遍的写法,当程序 ...

  7. 单片机c语言idata什么意思,单片机C语言中的data,idata,xdata,pdata,code

    从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...

  8. 单片机c语言快速除法运算,单片机开发厂家之单片机C语言快速精度除法方案

    资源描述: 单片机C语言快速精度除法方案 目前的51单片机在进行带小数点结果的除法一般可以采用浮点数计算的方式,但是浮点数计算有一个缺点就是非常耗时,在对时间要求严格的工况就不太适用. 笔者最近做了个 ...

  9. 单片机c语言全程图文教程,单片机C语言,从小白到菜鸟进阶教程(超详细代码解读)...

    首先要认识单片机是啥?单片机语言是啥?单片机是一种可存储可读写可编程可运行的芯片,你写啥它就运行啥,运行出错,那你程序写错了.单片机语言,嗯!确定要学C啊!有哪一种语言能够抗衡C的强大地位?没有!哪一 ...

  10. 单片机c语言字符型数据类型,单片机C语言数据类型

    本资料适合单片机C语言的初学者,可当做参考使用.牛B的人就不要看了 单片机C语言的数据类型 在最小系统的介绍中,我们已经大致了解了单片机的程序结构,下面我们来系统介绍一下. 先来简单说说C语言的标识符 ...

最新文章

  1. UE把环境变量Path改了
  2. linux里与Ctrl组合使用的键
  3. ITK:可变长度向量
  4. 怎么保证读取最新数据_Kafka怎么保证数据不丢失?
  5. LeetCode 1852. 每个子数组的数字种类数(滑窗)
  6. 「镁客·请讲」HelloEOS梓岑:嘻哈外表下的区块链式达尔文主义
  7. linux用户管理命令(添加,删除,修改)
  8. 计算机学号生成准考证号,设计考场编排,生成准考证号
  9. Android毕业设计选题依据,毕业设计选题依据、目的意义、
  10. 基于Matlab的数字水印设计—基于DCT域的水
  11. wifi共享大师开启失败发射功能失败
  12. xc7z030有多少个quad_XC7Z030-2FBG676I;XCZ7030-2FFG676I ZYNQ7系列专营
  13. 美团买单与微信分付入局后,蚂蚁花呗和京东白条地位不保了?
  14. torch.cuda.is_available()返回false?
  15. legacy引导gpt分区_支持win10的传统legacy启动无损转换为UEFI GPT启动
  16. Run Android apps in Windows, OS X, Linux with Chrome (and a modified runtime)
  17. C#读写修改设置调整UVC摄像头画面-伽玛
  18. 卡罗拉 (COROLLA) - 参数配置
  19. 读《达·芬奇密码》| 一场侦探式的宗教传道
  20. Vim 清除上次搜索突出显示

热门文章

  1. matlab图像的错切变换,matlab 图像几何变换+答案
  2. java 实现电子签名_Java实现数字签名
  3. 一、微服务基本介绍-背景(基于电商项目)
  4. eof() 和fail()
  5. STMF103定时器
  6. antd mobile toast 数字不会换行
  7. 换地方上网后Kali Linux 网络设置
  8. 《MATLAB专刊》——利用向量化编程提升MATLAB代码执行效率
  9. python求全排列
  10. openGauss数据库源码解析系列文章——openGauss开发快速入门(一)