📄 main.c
字号:
/**************************************************************************************
** 单片机信号发片器
** 日期: 2008年5月14日
**作者: ZHL
**功能: 主要用DAC0832来把数模式转换,生成想要的波形
***************************************************************************************/
#include "main.h"
/**************************************************************************************
**函数名称:main()
**函数功能:主函数
**输入参数:无
**输出参数:无
***************************************************************************************/
void main(void)
{
OnStart(); //上电初始化
while(1)
{
KeyScan();
}
}
/**************************************************************************************
**函数名称:DelayNus()
**函数功能:延时函数
**输入参数:时间
**输出参数:无
***************************************************************************************/
void DelayNus(uint8 t)
{
uint8 i;
for( ; t < 0; t--) //t * 500us
for(i = 250; i < 0; i++) //500us
{
;
}
}
/*********************************************************************************************
**函数名称:Delay10ms
**函数功能:10ms延时子程序 程序:
**输入参数:无
**输出参数:无
********************************************************************************************/
void Delay10ms(void)
{
uint8 i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
/*********************************************************************************************
**函数名称:Delay10ms
**函数功能:10ms延时子程序 程序:
**输入参数:无
**输出参数:无
********************************************************************************************/
void KeyScan(void)
{
uint8 ckey;
ckey = 0;
if(0XFF != P1)
{
ENTER_CRITICAL(); //关闭定时器中断
Delay10ms();
if(0xFF != P1)
{
Delay10ms();
ckey = P1;
}
}
switch(ckey) //按键处理
{
case 0XFE:
SelectWave(); //选择波形
break;
case 0XFD:
IncreaseFrequency(); //增加频率
break;
case 0XFB:
DecreaseFrequency(); //减小频率
break;
case 0XF7:
ShowFrequency(); //显示频率
break;
case 0xef:
DecreaseAmplitude(); //减小幅度
break;
case 0xdf:
IncreaseAmplitude(); //增加幅度
break;
}
EXIT_CRITICAL(); //开启定时器中断
}
/**************************************************************************************
**函数名称:OnStart()
**函数功能:延时函数
**输入参数:时间
**输出参数:无
***************************************************************************************/
void OnStart(void)
{
gcFunKey = 1; //选择波形的变量
gcAmplitude = 0xff;
DAC_CS = 0;
InitTimer0(); //定时器初始化
LCD_Init(); //液晶显示器初始
DisplayListChar(0,0,gsLCDStart);
}
/**************************************************************************************
**函数名称:SelectWave()
**函数功能:选择波形
**输入参数:无
**输出参数:无
***************************************************************************************/
void SelectWave(void)
{
gcFunKey++;
if(3 == gcFunKey)
gcFunKey = 0;
}
/**************************************************************************************
**函数名称:IncreaseFrequency()
**函数功能:增加频率
**输入参数:无
**输出参数:无
***************************************************************************************/
void IncreaseFrequency(void)
{
gcTl0++;
if(gcTl0 == 0xff)
gcTh0++;
ShowFrequency();
}
/**************************************************************************************
**函数名称:DecreaseFrequency()
**函数功能:减少频率
**输入参数:无
**输出参数:无
***************************************************************************************/
void DecreaseFrequency(void)
{
gcTl0--;
if(gcTl0 == 0x00)
gcTh0--;
ShowFrequency();
}
/**************************************************************************************
**函数名称:ShowFrequency()
**函数功能:显示频率
**输入参数:无
**输出参数:无
***************************************************************************************/
void ShowFrequency(void)
{
int lTime;
TR0 = FALSE;
lTime = 1000000 /((65535 -gcTh0 * 256 -gcTl0) * 256 *2);
if(lTime < 0)
{
lTime = 0;
}
DisplayLED(lTime); //显示数码管
DelayNus(200);
TR0 = TRUE;
}
/**************************************************************************************
**函数名称:DecreaseAmplitude()
**函数功能:减少幅度
**输入参数:无
**输出参数:无
***************************************************************************************/
void DecreaseAmplitude(void)
{
gcAmplitude--;
gcSineAmplitude--;
if(gcAmplitude <= 0)
{
gcAmplitude = 0xff;
}
if(gcSineAmplitude <= 0)
{
gcSineAmplitude = 0;
}
}
/**************************************************************************************
**函数名称:IncreaseFrequency()
**函数功能:增加幅度
**输入参数:无
**输出参数:无
***************************************************************************************/
void IncreaseAmplitude(void)
{
gcAmplitude++;
gcSineAmplitude++;
if(gcAmplitude > 0xff)
{
gcAmplitude = 0xff;
}
if(gcSineAmplitude > 0xff)
{
gcSineAmplitude = 0;
}
}
/**************************************************************************************
**函数名称:WriteDAC0832()
**函数功能:数模转换
**输入参数:时间
**输出参数:无
***************************************************************************************/
void WriteDAC0832(uint8 OutData)
{
DAC_DATA = OutData;
}
/**************************************************************************************
**函数名称:InitTimer0()
**函数功能:定时器0初始化
**输入参数:无
**输出参数:无
***************************************************************************************/
void InitTimer0(void)
{
TMOD = 0X01; //定时器0,方式1,即2的16次方
TH0 = gcTh0; //初始值
TL0 = gcTl0;
ET0 = TRUE; //开定时器中断
EA = TRUE; //开全局中断
TR0 = TRUE; //启动定时器
}
/**************************************************************************************
**函数名称:TriangleWave()
**函数功能:三角波
**输入参数:无
**输出参数:无
***************************************************************************************/
void TriangleWave(void)
{
if(gcTriCount < (gcAmplitude / 2))
WriteDAC0832(gcTriCount);
else
{
if(gcAmplitude > gcTriCount)
WriteDAC0832(gcAmplitude -gcTriCount);
else
gcTriCount = 0;
}
}
/**************************************************************************************
**函数名称:RectangleWave()
**函数功能:方波
**输入参数:uint8 dly //延时时间
**输出参数:无
***************************************************************************************/
void RectangleWave(void)
{
if(gcRecCount < 128)
WriteDAC0832(0x00); //最小值
else
WriteDAC0832(0xff); //最大值
}
/**************************************************************************************
**函数名称:SineWave()
**函数功能:正弦波
**输入参数:无
**输出参数:无
***************************************************************************************/
void SineWave(void)
{
WriteDAC0832(SinTab[gcSinCount]);
}
/**************************************************************************************
**函数名称:InitTimer0()
**函数功能:定时器0初始化
**输入参数:无
**输出参数:无
***************************************************************************************/
void IntTimer0(void) interrupt 1
{
TR0 = FALSE;
switch(gcFunKey)
{
case 0: //三角
{
TriangleWave();
gcTriCount++;
}
break;
case 1: //方波
{
RectangleWave();
gcRecCount++;
}
break;
case 2: //正弦波
{
SineWave();
gcSinCount++;
}
break;
}
TH0 = gcTh0; //初始值
TL0 = gcTl0;
TR0 = TRUE; //启动定时器
}
/**************************************************************************************
**函数名称:DisplayLED()
**函数功能:数码管显示
**输入参数:要显示的数据
**输出参数:无
***************************************************************************************/
void DisplayLED(int32 focs)
{
uint8 data num[7];
num[0] = focs /1000 + '0';
num[1] =( focs /100 ) % 10 + '0';
num[2] = (focs %100) /10 + '0';
num[3] = focs % 10 + '0';
num[4] = 'M';
num[5] = 'H';
num[6] = 'z';
CLS();
DisplayListChar(0,0,num);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -