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

相关推荐
崇山峻岭之间26 分钟前
单片机USB虚拟串口实验
单片机·嵌入式硬件
崇山峻岭之间39 分钟前
单片机USB U盘实验
单片机·嵌入式硬件
点灯小铭1 小时前
基于单片机的锅炉压力与温度监测报警系统设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
环境倒逼我学习1 小时前
无人机地面站之第13章 Mission Planner 入门与界面总览
单片机·嵌入式硬件·无人机
大阳1231 小时前
ARM.8(ADC,SPI)
单片机·嵌入式硬件·adc·spi
hoiii1872 小时前
基于 STM32 的标准遥控器架构与源码
stm32·嵌入式硬件·架构
少年、潜行2 小时前
STM32 ISP 升级体验
stm32·嵌入式硬件·isp升级·系统编程区域
杨连江2 小时前
一种三模式可调气隙式双侧定子滑移可变磁通轴向永磁电机
单片机·嵌入式硬件
Aaron158811 小时前
无人机反制中AOA+TDOA联合定位技术与雷达探测定位技术的应用对比分析
arm开发·嵌入式硬件·fpga开发·硬件工程·无人机·信息与通信·信号处理
foundbug99912 小时前
STM32 睡眠模式测试程序
stm32·单片机·嵌入式硬件