基于51单片机的波形发生器&DA转换(dac0832)

发布者:快乐心跳最新更新时间:2016-09-26 来源: eefocus关键字:51单片机  波形发生器  DA转换  dac0832 手机看文章 扫描二维码
随时随地手机看文章
代码如下:

#include"reg51.h"
#define uchar unsigned char
sbit ksaw=P2^0;    //锯齿波按键.
sbit ktran=P2^1;    //三角波按键.
sbit ksquare=P2^2;  //方波按键.
sbit ksin=P2^3;     //正弦波按键.

uchar key1;
uchar keya;
uchar keyb;
uchar keyc;
uchar keyd;void delay( );
uchar  code tab[128]={
64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,
109,111,113,115,117,118,120,121,123,124,125,126,126,
127,127,127,127,127,127,127,126,126,125,124,123,121,
120,118,117,115,113,111,109,106,104,102,99,96,94,91,
88,85,82,79,76,73,70,67,64,60,57,54,51,48,45,42,39,
36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,
1,0,0,0,0,0,0,0,1,1,2,3,4,6,7,9,10,12,14,16,18,21,23,
25,28,31,33,36,39,42,45,48,51,54,57,60};

void delay( )
{
  uchar i;
  for(i=0;i<255;i++);
}
void saw(void)   //锯齿波.
{
 uchar i;
 while(1)
 {
  if(keya==1)
  {
  for(i=0;i<255;i++)
  P0=i;
   }
   else break;
  }
 }
void tran(void)  //三角波
{
 uchar i;
 while(1)
 {
  if(keyb==1)
  {
  for(i=0;i<255;i++)
  P0=i;
  for(i=255;i>0;i--)
  P0=i;
  }
  else break;
  }
}
void square(void)  //方波
{
  while(1)
  {
   if(keyc==1)
   {
   P0=0x00;
   delay();
   P0=0xff;
   delay();
    }
 else break;
  }

}

void sin( )    //正弦波
{
  unsigned int  i=0;
  while(1)
  {
   if(keyd==1)
   {
   if(++i==128)i=0;
       {P0=tab[i];}
    }
 else break;
  }
}
void main(void)  //主函数
{
  EA=1;
  EX0=1;
  while(1)
  {
  if(key1)
  {
   switch(key1)
   {
    case 0x01:
    //P0=0XC0;//
    saw();
    break;
  case 0x02:
    //P0=0XC0;//
    tran();
    break;
     case 0x03:
    //P0=0XBE;//
    square();
    break;
  case 0x04:
    //P0=0XB6;//
    sin();
    break;
   }
 }
  }

}

void int0(void)interrupt 0 using 1
{
if(ksaw==0)
   {key1=0x01;keya=1;keyb=0;keyc=0;keyd=0;}                 
 if(ktran==0)
  {key1=0x02;keya=0;keyb=1;keyc=0;keyd=0;}
  if(ksquare==0)
  { key1=0x03;keya=0;keyb=0;keyc=1;keyd=0;}
 if(ksin==0)
  {key1=0x04;keya=0;keyb=0;keyc=0;keyd=1;}
}

图片如下:

波形发生器 - zengjian1024 - 曾 健 《1 0 2 4~~~BLOG》
关键字:51单片机  波形发生器  DA转换  dac0832 引用地址:基于51单片机的波形发生器&DA转换(dac0832)

上一篇:基于GSM网络的汽车防盗报警系统设计
下一篇:GPRS模块发送信息代码

推荐阅读最新更新时间:2024-03-16 15:12

51单片机快速入门指南】4.1: I2C 与 AT24C02 (EEPROM) 的跨页连续读写
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《普中 51 单片机开发攻略》、《24C02/24C04/24C08/24C16/24C32/24C64芯片手册》 AT24Cxx 介绍 AT24C01/02/04/08/16…是一个1K/2K/4K/8K/16K 位串行 CMOS,内部含有 128/256/512/1024/2048 个 8 位字节,AT24C01 有一个 8 字节页写缓冲器, AT24C02/04/08/16 有一个 16 字节页写缓冲器。该器件通过 I2C
[单片机]
【<font color='red'>51单片机</font>快速入门指南】4.1: I2C 与 AT24C02 (EEPROM) 的跨页连续读写
51单片机第六弹---LCD液晶显示模块
/******************************************************************************* * 实 验 名 : LCD1602实验 * 使用的IO : LCD使用P0 * 实验效果 : 在液晶屏上显示 love * 注 意 : *******************************************************************************/ #include reg52.h #include intrins.h #define GPIO_LED P2 #define
[单片机]
<font color='red'>51单片机</font>第六弹---LCD液晶显示模块
51单片机(STC89C52RC) IO扩展实验
  最近碰到了需要扩展IO口的情况了,正在想办法从lcd1602身上挤出几个IO口,另一种可行的方法是添加专用IC,google之发现可以有更好的方法,网上流传经典IO接按键法,可以用5个IO口实现5X5矩阵键盘.参考 这里 :    我参照着实验了一番,并用protues仿真看看;用上面的例子,如图: iframe id="iframe_0.9038296684157103" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22http://img
[单片机]
<font color='red'>51单片机</font>(STC89C52RC) IO扩展实验
关于MCS-51单片机实现PWM的方法
关于MCS-51单片机实现PWM的方法 PWM 是 脉冲宽度调制 的意思。 PWM 实际上是在单片机的某个引脚输出一系列的矩形波,其周期一般是固定的;而其高电平、低电平所占用的时间,是可以受控调整的。高电平、低电平所占用的时间之比,称为占空比,其值为0~1之间。PWM 的应用很广,简单的说,它可以控制灯光的亮度、可以控制直流电机的转速,甚至还可以输出语音信号。 新型的单片机,往往都含有硬件的 PWM 模块,编写程序就很简单;而老式的MCS-51系列,就不具备这个条件。 其实,在没有 PWM 硬件的单片机上实现 PWM,也并不难,只需一个定时器,令其工作在中断方式即可。下面以网上的一个题目为例,说明实现 PWM 方法。 题目链接:ht
[单片机]
MCS-51单片机中断函数注意事项
(1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。 (2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。 (3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。 (4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。 (5)C51编译器对中断函数编译时会自动在程序开
[单片机]
22-基于51单片机的数字时钟(万年历)
具体实现功能 系统由STC89C52单片机+DS1302时钟芯片+按键模块+LCD1602显示+电源构成。 具体功能: 1、可以显示年、月、日、时、分、秒、星期、农历; 2、按键可以设置闹钟及报警; 3、按键可以调整时间,显示是平年还是闰年。 共4个按键:设置、加、减、切换。 设计背景 在现实我们生活中每个人都可能有自己的时钟,光阴在永不停息的流逝,有了时钟人们就能随着时间有计划的过着每一天。然而现在绝大部分的时钟有的需要不断地更换电池,有些时钟需要外接电源,如果一旦电池没电或者外接电源无法供电,时钟就会停止计时了。而美国DALLAS 公司的新型时钟日历芯片DS1302就能解决这一问题。该器件能提供实时时钟
[单片机]
22-基于<font color='red'>51单片机</font>的数字时钟(万年历)
51单片机C语言程序100例分析(2)定时器+中断
#include reg51.h //包含 51 单片机寄存器定义的头文件 void main(void) { TMOD=0x01;// 使用定时器 T0 的模式 1 TH0=(65536-46083)/256; // 定时器 T0的高 8 位赋初值 TL0=(65536-46083)%256; // 定时器 T0的低 8 位赋初值 TR0=1; // 启动定时器 T0 TF0=0; //清定时器溢出标志位 P2=0xff; while(1)// 无限循环等待查询 { while(TF0==0); TF0=0; P2=~P2;//按位取反 TH0=(65536-46083)/256; /
[单片机]
基于MCS-51单片机的IEEE-488接口设计
1 概 述 智能仪器程控接口电路的设计,首先是根据仪器的功能确定该仪器的接口功能。文中所涉及的仪器是以MCS-51系列单片机作为内部控制器的高速数据采集装置,由于A/D转换器既要向计算机输送采集结果,又要接受计算机对其工作条件的控制,因此,在程控接口电路设计时,设置了六种接口功能:源挂钩功能(选用SH1功能子集)、受者挂钩功能(选用AH1功能子集)、讲功能(选用T5功能子集)、听功能(选用L4功能子集)、远地/本地功能(选用RL功能子集)和器件触发功能(选用DT1功能子集)。 2 接 口 功 能 (IF) 设 计 如图1所示是该仪器的原理框图,其中接口功能电路由时序转换与信号控制电路、MC68488和四片MC34
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved