找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机简易信号发生器问题求助

[复制链接]
跳转到指定楼层
楼主
ID:102881 发表于 2016-1-12 13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知道哪里出错,仿真时没波形,求高手修改。或有更简单的代码和仿真图也可以发给我。要简单的!
#include<reg51.h>
#include<absacc.h>  
#define P0 XBYTE[0xdf00] // P0琐存地址
unsigned char code
seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //显示数组
unsigned char code sig_sin[256]={  
0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,  
0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,  
0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,  
0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,  
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,  
0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc,  
0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,  
0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,  
0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,  
0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,  
0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,  
0x8,0x7,0x6,0x5,0x4,0x3,0x3,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,  
0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xc,0xd,0xe,0x10,0x12,0x13,  
0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35,  
0x38,0x3b,0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,  
0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c
};  
unsigned char a; //全局信号信号选择变量
unsigned int b; //全局信号档位变量送显示
unsigned int pinlv; // 档位变量送定时器赋初值
unsigned int i=0; // 中断服务计数
sbit butten_swtich=P3^2; //按键1 波形选择
sbit butten_up =P3^3; //按键2 频率+
sbit butten_down =P3^4; //按键3 频率-
void delay1ms(unsigned char ii)//延时基时1毫秒 子程序
{
unsigned char jj;
for(;ii>0;ii--)  
for(jj=0;jj<125;jj++);
}
void Init_Timer1(void) //定时器0初始化
{  
EA=1; //开总中断
ET1=1; //定时器T1中断允许
TMOD=0x10; //TMOD=0001 000B,使用定时器T1的模式1
TH1=(65536-500)/256; //定时器T1的高8位赋初值
TL1=(65536-500)%256; //定时器T1的高8位赋初值
TR1=1; //启动定时器T1
}
void butten_scan1() //按键处理子程序
{
if(butten_swtich==0) //信号按键选择
{
delay1ms(20);//消抖延时
if(butten_swtich==0)
{
while(!butten_swtich); //等待按键松开
a++;
if(a>3)a=1; //循环选择
}
}
}
void butten_scan2()
{
if(butten_up==0) //信号按键选择
{
delay1ms(20); //消抖延时
if(butten_up==0)
{
while(!butten_up); //等待按键松开
b=b+1;
if(b>9)b=9; //再按加就不再加了
}
}
else if(butten_down==0) //信号按键选择
{
delay1ms(10);//消抖延时
if(butten_down==0)
{
while(!butten_down); //等待按键松开
b=b-1;
if(b<1)b=1; //再按减就不再减了
}
}
}
main()  
{
a=1;b=5;
Init_Timer1();
while(1)
{
butten_scan1(); //调用按键处理子程序
butten_scan2();
P2=0x1;
P1=seg[a]; //信号输出送显示 1三角波 2正弦波 3方波
delay1ms(10);
P2=0x8;  
P1=seg; //档位显示0~9 默认第5档
delay1ms(10);
}
}
void OS_Timer1(void) interrupt 3 // 系统OS定时中断服务
{
switch(b) //根据不同的档位给定时器赋不同的初值
{
case 1: pinlv=0xf2;break;
case 2: pinlv=0xf3;break;
case 3: pinlv=0xf4;break;
case 4: pinlv=0xf5;break;
case 5: pinlv=0xf6;break;
case 6: pinlv=0xf7;break;
case 7: pinlv=0xf8;break;
case 8: pinlv=0xf9;break;
case 9: pinlv=0xfa;break;
}
TH1=pinlv;  //定时器赋初值
TL1=0xff;   //定时器赋初值
if (a==1) P0=sig_sin; //P0口给正弦波信号数组
else if (a==2) {if(i<128)P0=2*i;else P0=254-2*i;}//P0口给三角波信号数组
else if (a==3){ if(i>128)P0=0xff;else P0=0;} //方波
i++;if(i>255)i=0;
}

无标题.png (97.57 KB, 下载次数: 138)

仿真图

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

使用道具 举报

沙发
ID:102923 发表于 2016-1-12 15:57 | 只看该作者
看不出来喔,不过帮忙顶
回复

使用道具 举报

板凳
ID:72781 发表于 2016-1-12 23:51 | 只看该作者

2A-DAC0832-锯齿波(实验2)2014.10.24.zip (38.7 KB, 下载次数: 20) 这有一个我原来做过的实验,没用中断,没有按键,我看了你的,问题可能在于你的中断函数中送波形你直接把数组地址给传出去了,却没有让数组地址++,很可能只发送了一个数据,建议在中断中把起始地址给更改了,在主循环中把数组内容一个一个送给DAC
回复

使用道具 举报

地板
ID:127555 发表于 2016-6-22 17:36 | 只看该作者
暗光 发表于 2016-1-12 23:51
这有一个我原来做过的实验,没用中断,没有按键,我看了你的,问题可能在于你的中断函数中送波形你直接把 ...

不全。
回复

使用道具 举报

5#
ID:72781 发表于 2016-6-23 13:42 | 只看该作者

是的,这个只是一个实验,不是信号发生器全部信号,不过原理差不多,体会了,加上按键切换波形就好了
回复

使用道具 举报

6#
ID:158454 发表于 2016-12-29 21:39 | 只看该作者
看不出来呢,,,,,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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