55 基于单片机的方波频率可调

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

采用STC89C52单片机最小系统,设计DAC0832、放大器、与示波器显示方波,四位数码管显示频率,两个按键可调。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

三、程序编程

cpp 复制代码
#include "reg51.h" 
#include <data.h>
#define uchar unsigned char   
#define uint unsigned int   
#define key P1   
#define dataout P3   
#define dula P0		//段选信号的锁存器控制
sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
static int mc[5]={0,0,6,0,0};
static int a;
uchar fre[5] ="001Hz";
uint data THHL=65536-3906;
uchar data keyword,n=0;   
uchar data div = 1; 

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};			 //0-F字符串

void delay(uint count)      //delay
{
  uint i;
  while(count)
  {
    i=200;
    while(i>0)
    i--;
    count--;
  }
}

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
							a = div *60;
							mc[0]=a/1000%10;  
							mc[1]=a/100%10;
							mc[2]=a/10%10;
							mc[3]=a%10;					
	
							fre[0]=div/100 + '0';fre[1]=div/10%10 + '0';fre[2]=div%10 + '0';
							TR1=0;
							TR1=1; break;
							}   
		case 61: { //减小
							if(div<=1) THHL=65536-3906; else {div--;THHL=65536-3906/div;}//频率down
				
							a = div *60;
							mc[0]=a/1000%10;  
							mc[1]=a/100%10;
							mc[2]=a/10%10;
							mc[3]=a%10;	
	  
							fre[0]=div/100 + '0';fre[1]=div/10%10 + '0';fre[2]=div%10 + '0';
							TR1=0;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 display()
{
	 wei1=0;		//显示千位
   wei2=1;
   wei3=1;
   wei4=1;
   P0=table[mc[0]];
   delay(2);

   wei1=1;		//显示百位
   wei2=0;
   wei3=1;
   wei4=1;
   P0=table[mc[1]];
   delay(2);

   wei1=1;		//显示十位
   wei2=1;
   wei3=0;
   wei4=1;
   P0=table[mc[2]];
   delay(2);

   wei1=1;		//显示个位
   wei2=1;
   wei3=1;
   wei4=0;
   P0=table[mc[3]];
   delay(2);
   P0=0x00;
}
void main()   
{   

	init();
	while(1)   
	{   
		keyscan(); //按键
		dataout=squ_tab[n]; //方波
		display();

	}   
}   
   
void time_intt1(void) interrupt 3   
{   
	TL1=THHL%256;TH1=THHL/256;   
	n++;
}   
                                               

四、实现现象

具体动态效果看B站演示视频:

基于单片机的方波频率可调_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):

链接: https://pan.baidu.com/s/1vvaAZXOqk87dgPrYmRI-_w?pwd=xaz4 提取码: xaz4

相关推荐
zhmc2 小时前
Cortex M0单片机指令执行周期
单片机·嵌入式硬件
编程小白菜1232 小时前
STM32L051单片机485Ymode升级后程序不能正常运行问题
stm32·嵌入式硬件
NEU-UUN3 小时前
5.1.STM32-EXTI外部中断——全程手敲板书
stm32·单片机·嵌入式硬件
TangDuoduo00055 小时前
【常见传感器原理及应用】
单片机·嵌入式硬件
q***064715 小时前
SocketTool、串口调试助手、MQTT中间件基础
单片机·嵌入式硬件·中间件
洋九八16 小时前
电路基础和 PCB 制作
单片机·嵌入式硬件·pcb工艺
qq_4017004117 小时前
RS485基本原理,电路、防雷、layout及设计要点
stm32·单片机
云山工作室21 小时前
用于电动汽车的永磁同步电机调速系统建模与仿真(论文+)
stm32·单片机·嵌入式硬件·毕业设计·毕设
yuan1999721 小时前
AD7689 12位串行ADC驱动与应用
单片机·嵌入式硬件
磨十三21 小时前
MCU 时钟系统全解析:主时钟、PLL、分频与外设时钟门控
arm开发·单片机·嵌入式硬件