基于51单片机信号发生器
(仿真+程序)
功能介绍
具体功能:
1.LCD1602液晶显示波形种类和频率值(0-200HZ);
2.按键设置波形种类、频率和振幅(0V-5V);
3.本设计可产生正弦波、三角波、矩形波;
演示视频:
<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="fX14LHhx-1731571554389" src="https://player.bilibili.com/player.html?aid=1156045273"></iframe>基于51单片机频率计仿真—LCD1602
添加图片注释,不超过 140 字(可选)
代码
/***微信公众号:木子单片机********/
#include <reg52.h>
#include "1602.h"
#define DataPort P2
sbit RS=P1^3;
sbit RW=P1^4;
sbit EN=P1^5;
uchar i=0;
uchar code meun[2][16]={"Frequency is: "," 00000 Hz "};
uchar code m[10]="0123456789";
unsigned char T0count;
unsigned char timecount;
bit flag;
unsigned int x;
void delay_ms(uchar t)
{
unsigned char i=0;
while(t--)for(i=0;i<120;i++);
}
void WriteData(uchar dat)
{
EN=0;
RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
RS=1;
RW=0;
EN=1;
DataPort=dat;
EN=0;
RS=0;
RW=0;
for (i=0;i<20;i++);
}
void WriteCmd(uchar cmd)
{
EN=0;
RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
EN=1;
DataPort=cmd;
RS=0;
RW=0;
EN=0;
for (i=0;i<20;i++);
}
void DisChar(uchar ps,uchar dat)
{
WriteCmd((0x80+ps));
WriteData(dat);
}
void LcdInit(void)
{
char pp=0;
WriteCmd(0x38);
delay_ms(5);
WriteCmd(0x38);
delay_ms(5);
WriteCmd(0x38);
delay_ms(5);
WriteCmd(0x01);delay_ms(5);
WriteCmd(0x06);delay_ms(5);
WriteCmd(0x38);
WriteCmd(0x0c);
WriteCmd(0x40);
for(pp=0;pp<16;pp++)DisChar(pp,*(meun[0]+pp));
for(pp=0;pp<16;pp++)DisChar(pp+0x40,*(meun[1]+pp));
}
void Display(unsigned int x)
{
DisChar(7+0x40,m[x%10]);x /= 10;
DisChar(6+0x40,m[x%10]);x /= 10;
DisChar(5+0x40,m[x%10]);x /= 10;
DisChar(4+0x40,m[x%10]);x /= 10;
DisChar(3+0x40,m[x%10]);x /= 10;
delay_ms(200);
}
void main(void)
{
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-49989)/256;
TL1=(65536-49989)%256;
TR1=1;
ET0=1;
ET1=1;
EA=1;
TR0=1;
LcdInit();
while(1)
{
if(flag==1)
{
flag=0;
x=(T0count*65536+TH0*256+TL0);
timecount=0;
T0count=0;
TH0=0;
TL0=0;
TR0=1;
Display(x);
}
}
}
void t0(void) interrupt 1 using 0 //计脉冲个数
{
T0count++;
}
void t1(void) interrupt 3 using 0 //定时1s
{
TH1=(65536-50045)/256;
TL1=(65536-50045)%256;
timecount++;
if(timecount==20)
{
TR0=0;
timecount=0;
flag=1;
}
}
硬件设计
使用元器件:
单片机:AT89C51;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
添加图片注释,不超过 140 字(可选)
设计资料
01仿真图
本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!
添加图片注释,不超过 140 字(可选)
02程序
本设计使用软件keil5版本编程设计!具体如图!
添加图片注释,不超过 140 字(可选)
03设计资料
资料获取请关注同名公众号,全部资料包括程序(含注释)、仿真源文件等。具体内容如下,全网最全!!
添加图片注释,不超过 140 字(可选)
可以关注下方公众号!
点赞分享一起学习成长。
标签:140,uchar,51,unsigned,发生器,注释,单片机 From: https://blog.csdn.net/2401_82402501/article/details/143773866