⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main1.c

📁 这是一个简单的单片机实现方波信号产生的程序
💻 C
字号:
/************************************************************************************
*  Copyright (c) 2008,重庆优易特电子
*            All rights reserved.

* 摘 要:    方波信号发生器:10-200HZ,步长10HZ,P23口输出

* 文件名称: main.c
* CPU芯片:  STC89C51RC
* 学习板型: Easy51-B 
*  
* 当前版本: 2.0
* 作 者:	 cache
* 完成日期: 2008年1月23日
*
*************************************************************************************/

#include "reg52.h"

unsigned char  code Duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
	  0x6f,0X76,0X3e,0x55,0x37,0x77,0x5e,0x72};
unsigned char  Data_Buffer[4]={0,0,0,0};

unsigned char PinLV_Out=10;//范围:10-99

unsigned char th0,tl0;

sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;

sbit P23=P2^3;

sbit DOWN=P2^2; //修改频率按键
sbit UP=P2^1;  //修改频率按键

void Comute_pinlv()
{
 float t;
 unsigned int x;
 t=1000/PinLV_Out/2;//计算高\低宽度时间ms为单位
 t=t*921.6;  //11.0592MHZ晶振,1ms时间常数宽度为921.6
 t=65535-t;
 x=t;
 th0=x/256;
 tl0=x%256;   
 
 Data_Buffer[0]=0;	//频率值更新显示
 Data_Buffer[1]=PinLV_Out/100; 
 Data_Buffer[2]=PinLV_Out/10%10;
 Data_Buffer[3]=PinLV_Out%10;
}

void main()
{	
    unsigned char Bit=0;
	bit x=1,y=1;

	Comute_pinlv();
   	
	TMOD=0x11;
	TH0=th0;
	TL0=tl0;
 	TR0=1;
	ET0=1;
 	EA=1;	

    while(1)  
    {
       if(UP==1)x=1;
	   else if(x==1)
	   {//UP键按下
	      x=0;
			PinLV_Out+=10;
			if(PinLV_Out>200)PinLV_Out=200;
			Comute_pinlv();
	   }
	   
	   if(DOWN==1)y=1;
	   else if(y==1)
	   {//DN键按下
	      y=0;
		    if(PinLV_Out>10)
			   PinLV_Out-=10;
			Comute_pinlv();
	   }
	  

    	Bit++;//数码管扫描
 		if(Bit>=4)Bit=0;
 		P1|=0x0f;
	 	P0=Duan[Data_Buffer[Bit]];
 		switch(Bit)
 		{
 		 case 0: P10=0;break;
 		 case 1: P11=0;break;
 		 case 2: P12=0;break;
  		 case 3: P13=0;break;
 		}
    }
}

void timer0() interrupt 1
{//定时器0用于产生方波信号,定时器时间常数是由方波频率决定
 TH0=th0;
 TL0=tl0;

 P23=!P23;//方波输出
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -