📄 main1.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 + -