自学内容网 自学内容网

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

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

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

二、硬件资源

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

三、程序编程

#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 


原文地址:https://blog.csdn.net/zs849644371/article/details/144169426

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!