基于51单片机波形信号发生器

✅文末提供代码和仿真文件!

本文基于51单片机波形信号发生器实验,以及ICL8083芯片产生三种波形(正弦波、三角波、方波)仿真实验。

在这里插入图片描述

主程序

#include "reg51.h" 
#include <data.h>
#include <LCD1602.h>
#define uchar unsigned char   
#define uint unsigned int   
#define key P1   
#define dataout P3   
uchar fre[5] ="001Hz";
uint data THHL=65536-3906;
uchar data keyword,n=0;   
uchar data Signal_chose = 0; 
uchar data div = 1; 
void keyscan()   
{    
 keyword=key&0x3f;   
 if(keyword!=0x3f)   
 {   
  while((key&0x3f)!=0x3f);	//等待按键松开   
  switch(keyword)   
  {   
		case 62: {
							if(div>=100) THHL=65536-39; else {div++;THHL=65536-3906/div;}//频率up
							fre[0]=div/100 + '0';fre[1]=div/10%10 + '0';fre[2]=div%10 + '0';
							TR1=0;LCD_send(2,11,fre,5);TR1=1; break;
							}   
		case 61: {
							if(div<=1) THHL=65536-3906; else {div--;THHL=65536-3906/div;}//频率down
							fre[0]=div/100 + '0';fre[1]=div/10%10 + '0';fre[2]=div%10 + '0';
							TR1=0;LCD_send(2,11,fre,5);TR1=1; break;
							}   			
		

		case 59: {Signal_chose=0;TR1=0;LCD_send(1,5,"Sin       ",10);TR1=1; break;}  	//正弦波
		case 55:	{Signal_chose=1;TR1=0;LCD_send(1,5,"Triangular",10);TR1=1; break;}		//三角波	
		case 47:	{Signal_chose=2;TR1=0;LCD_send(1,5,"Square    ",10);TR1=1; break;}		//方波
		case 31: {Signal_chose=3;TR1=0;LCD_send(1,5,"Sawtooth  ",10);TR1=1; break;}		//锯齿波
		default:{break;}   
   }   
 }   
}   
   
void init()	//初始化 
{   
 key=0x3f;P2=0x00;dataout=0x00;THHL=65536-3906;  ///初始频率为1Hz
 TH1=THHL/256;TL1=THHL%256;   
 TMOD=0x11;ET1=1;TR1=1;EA=1;   
}   
   
void main()   
{   
	LCD_init();
	LCD_send(1,0,"Type:Sin",8);
	LCD_send(2,0,"frequency:",10);
	LCD_send(2,11,fre,5);
	init();
	while(1)   
	{   
		keyscan(); 
		switch(Signal_chose)   
			{   
				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;}				//锯齿波
				default:{break;}   
			 }   		
	}   
}   
   
void time_intt1(void) interrupt 3   
{   
	TL1=THHL%256;TH1=THHL/256;  
//	if(n>=255) {n=0;} else {n++;}   
	n++;
}

完整代码获取

在小程序内复制网盘链接下载后,直接解压即可。
https://www.kdocs.cn/l/cdKOEx0g5dWQ
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值