#include "reg51.h"
#include <data.h>
#define uchar unsigned char
#define uint unsigned int
#define key P2 //定义按键
#define dataout P0 //波形P0口输出
extern unsigned char UART_buff; //定义全局变量
uint data THHL=65536-3906; //定时时间3906us
uchar data keyword,n=0,i;
uchar data div = 1;
sbit led1 = P1^0; //用一个led1灯来检验是否收到串口数据
unsigned char UART_buff;
void delayms(unsigned int xms) //延时函数,延时 xms*10 us
{
uint i,j;
for(i=xms;i>0;i--)
for(j=10;j>0;j--);
}
void init_0() //初始化
{
key=0x3f;
dataout=0x00;
THHL=65536-3906; //初始频率为1Hz
TH0=THHL/256; //计数器是八位,把初值放入计数器中
TL0=THHL%256;
TMOD=0x22; //定时器0,1工作方式为2
ET0=1;
TR0=1;
EA=1;
}
void time_intt1(void) interrupt 1 //定时器中断0,通过n的循环来对波查表
{
TL0=THHL%256;
TH0=THHL/256;
if(n>255)
{
n=0;
}
else
{
n++;
}
}
void UartInit(void) //串口设置
{
PCON = 0x00; //波特率不变
SCON = 0x50; //设置串行口工作方式一
TMOD =0x22; //设置T1的工作方式,工作方式为2(8位自动重装)
TL1= 0xFD; //设置时间常数,确定波特率
TH1= 0xFD; //波特率设置为9600(11.0592MHz)
ET1=0;
ES=1;
EA=1;
TR1=1; //启动定时器
TI=0; //清掉TI,为发送下个数据做准备
}
void uart_ISR() interrupt 4 //串口中断
{
if(RI)
{ //如果收到.
RI = 0; //清除标志.
UART_buff = SBUF; //接收
led1 = UART_buff; //用灯的状态来判断是否接收到
}
else
{ //如果送毕.
TI = 0; //清除标志.
}
}
void keyscan() //键盘扫描函数
{
keyword=key&0x3f; //判断按键是否按下
if(keyword!=0x3f)
{
while((key&0x3f)!=0x3f); //等待按键松开
switch(keyword)
{
//频率增减按键操作
case 62: { //频率up
if(div>=100)
THHL=65536-39;
else
{
div++;
THHL=65536-3906/div;
}
TR1=0;TR1=1;
break;
}
case 61: { //频率down
if(div<=1)
THHL=65536-3906;
else
{
div--;
THHL=65536-3906/div;
}
TR1=0;TR1=1;
break;
}
default:{break;}
}
}
}
void main()
{
UartInit(); //串口通信
init_0();
UART_buff=1; //初始波形为三角波
led1 = 1; //检验通信是否正常
while(1)
{
keyscan();
switch(UART_buff)
{
case 0: {dataout=sin_tab[n]; break;} //正弦波
case 1: {dataout=thr_tab[n]; break;} //三角波
case 2: {dataout=squ_tab[n]; break;} //方波
case 3: {dataout=255-n;break;} //锯齿波
case 4: //梯形波
{
for(i=0;i<255;i+=3)
{
dataout=i;
}
dataout=0xff; //0xff为16进制255
delayms(20);
for(i=255;i>0;i-=3)
{
dataout=i;
}
dataout=0x00;
delayms(10);
break;}
default:{break;}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这是我用51单片机设计一个能产生正弦波、方波、三角波、梯形波、 锯齿波的波形发生器。其主要功能:(1)可通过串口选择产生的波形;(2)可通过按键调节波形频率。代码通过老师验收了,可以直接拿来用,且压缩包有protues仿真电路图,有什么疑问可以加我联系方式。微信:wpt666aaa 或QQ:2036795517。
资源推荐
资源详情
资源评论
收起资源包目录
基于51单片机的波形发生器.zip (27个子文件)
单片机课设
51信号发生器.pdsprj 27KB
Last Loaded 51信号发生器.pdsbak 27KB
51信号发生器.pdsprj.DESKTOP-DU2DATF.30111.workspace 3KB
1、程序(C语言)
data.h 9KB
Signal_51.hex 7KB
reg51.h 2KB
Signal_51.uvgui.我 69KB
Last Loaded 51信号发生器.pdsbak 26KB
Signal_51.uvproj 14KB
Objects
Signal_51.obj 9KB
Signal_51.hex 6KB
Signal_51.build_log.htm 1KB
Signal_51.plg 177B
Signal_51.lnp 88B
Signal_51 8KB
LCD1602.obj 4KB
Signal_51_uvopt.bak 57KB
LCD1602.c 1KB
Signal_51.uvgui.30111 88KB
Signal.c 3KB
Signal_51_uvproj.bak 12KB
LCD1602.h 346B
Listings
LCD1602.lst 3KB
Signal_51.m51 10KB
Signal_51.lst 7KB
Signal_51.c 3KB
Signal_51.uvopt 7KB
共 27 条
- 1
李白有点儿黑
- 粉丝: 429
- 资源: 13
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
前往页