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

相关推荐
BW.SU1 小时前
单片机 + 图像处理芯片 + TFT彩屏 触摸滑动条控件
单片机·嵌入式硬件·51单片机·ra8889·ra6809·图形处理芯片·stc8h8k64u
程序员JerrySUN8 小时前
驱动开发硬核特训 · Day 22(下篇): # 深入理解 Power-domain 框架:概念、功能与完整代码剖析
linux·开发语言·驱动开发·嵌入式硬件
尤老师FPGA11 小时前
LVDS系列9:Xilinx 7系可编程输入延迟(二)
单片机·嵌入式硬件·fpga开发
雾削木13 小时前
mAh 与 Wh:电量单位的深度解析
开发语言·c++·单片机·嵌入式硬件·算法·电脑
AiFlutter14 小时前
低代码平台开发手机USB-HID调试助手
单片机·游戏·计算机外设
Mirelladis15 小时前
实验:串口通信
单片机·51单片机
RaLi和夕15 小时前
单片机学习笔记9.数码管
汇编·笔记·单片机·嵌入式硬件·学习
普普通通的一名码农16 小时前
ESP32-S3 入门学习笔记(四):LED实验
笔记·单片机·学习
教练、我想打篮球16 小时前
03 基于 STM32 的温度控制系统
stm32·单片机·嵌入式硬件
电鱼智能的电小鱼17 小时前
EFISH-SBC-RK3588 —— 厘米级定位 × 旗舰算力 × 工业级可靠‌
linux·人工智能·嵌入式硬件·边缘计算