标题:
简易频率计+AD原理图+单片机代码
[打印本页]
作者:
shaoye
时间:
2017-5-4 12:12
标题:
简易频率计+AD原理图+单片机代码
单片机简易频率计原理图如下:
频率计.png
(164.17 KB, 下载次数: 102)
下载附件
2017-5-4 12:08 上传
0.png
(47.82 KB, 下载次数: 66)
下载附件
2017-5-4 15:46 上传
----------------------------------------------------------------------------------------------------
第一部分:文件夹命名规则
----------------------------------------------------------------------------------------------------
APP 应用程序文件夹
BRD 板载设备驱动与使用文件夹
CPU 微控制器相关文件夹
CPU-CFF 微控制器内存等配置文件夹
CPU-STP 微控制器启动代码文件夹
ELS 其他代码文件夹
FUC 通用自定义代码文件夹
GEN 通用标准代码文件夹
PRJ 工程文件夹
PRJ-EXE IAR工程输出可执行文件文件夹
PRJ-OBJ 工程输出文件文件夹
PRJ-LST 工程输出链表文件夹
SYS 操作系统文件夹
51单片机源程序
//==================================================================================================
// 工程功能:
// 工程等级:工程级/驱动级
// 工程硬件:STC89C52RC
// 工程软件:Keil C51 uVision4
// 工程作者:智心科技(ZhiXinKeJi)(http://bengbucollege.taobao.com/)
// 工程创建:2014-10-31
// 工程版次:1
// 工程修改:2014-10-31
// 修改内容:
//==================================================================================================
//==============================包含的头文件========================================================
#include"MAIN.H" // 包含全局头文件,
//==============================定义全局变量========================================================
unsigned long Freq_CUNT;
//==================================================================================================
// 实现功能:主函数
// 函数说明:
// 函数备注:
//==================================================================================================
void main(void)
{
TIME_Cnfg(); // 配置 定时器(TIME)
SEGx4_Init(); // 初始化 SEGx4
while(1)
{
if(Freq_CUNT<=10000)
{
SEGx4_ShowNumbx4(Freq_CUNT); // 1Hz单位
LEDx2_Sets(LEDc1,LEDs0); // 黄灯亮
LEDx2_Sets(LEDc2,LEDs1); // 绿灯灭
}
else if(Freq_CUNT<=400000)
{
SEGx4_ShowNumbx4(Freq_CUNT/1000); // 1KHz单位
LEDx2_Sets(LEDc1,LEDs1); // 黄灯灭
LEDx2_Sets(LEDc2,LEDs0); // 绿灯亮
DELAY_nMS(1000);
}
else
{
SEGx4_ShowStrg("----"); //
LEDx2_Sets(LEDc1,LEDs1); // 黄灯灭
LEDx2_Sets(LEDc2,LEDs1); // 绿灯灭
}
}
}
复制代码
/*================================================================================================*/
/* 文件功能:SEGx4-四位数码管 */
/* 文件说明:端口直接连接方式 */
/* 硬件平台:STC89C52RC */
/* 软件平台:Keil uVision4-C51 V9.0 */
/*================================================================================================*/
//==============================包含的头文件========================================================
#include"MAIN.H" // 包含全局头文件,
#include"SEGx4.H" // 包含外设头文件,SEGx4-四位数码管
#include"SEGx4_FONT.H" // 包含外设头文件,SEGx4-四位数码管/字库文件
//==============================硬件端口定义========================================================
#define SEGx4_DATAPORT P0 // 定义 SEGx4 段码 8位端口
sbit SEGx4_BIT0=P2^4; // 定义 SEGx4 位码 0号端口
sbit SEGx4_BIT1=P2^5; // 定义 SEGx4 位码 1号端口
sbit SEGx4_BIT2=P2^6; // 定义 SEGx4 位码 2号端口
sbit SEGx4_BIT3=P2^7; // 定义 SEGx4 位码 3号端口
//==============================宏自定义声明========================================================
// SEGx4 位数
#define SEGx4_UNIT 4 // 数据引脚,数据端口使用的数量。
//==============================定义引用变量========================================================
unsigned char SEGx4_ShowData[SEGx4_UNIT]; // 定义字符数组,存放待显示字符编码
//==================================================================================================
// 函数功能:SEGx4 初始化
// 函数标记:应用函数,完成,
// 函数说明:
//--------------------------------------------------------------------------------------------------
// 输入参量:无
// 输出参量:无
//==================================================================================================
void SEGx4_Init(void)
{
}
//==================================================================================================
// 函数功能:SEGx4 显示字符串
// 函数标记:应用函数,完成,
// 函数说明:
//--------------------------------------------------------------------------------------------------
// 输入参量:_STRG:待显示的字符串;
// 输出参量:无
//==================================================================================================
void SEGx4_ShowStrg(unsigned char *_STRG)
{
unsigned char i=0; //定义局部变量,一定赋予初始值为0
unsigned char j; //定义局部变量,用于循环
while(*_STRG)
{
for(j=0;j<32;j++) //循环32次,查询数码管字模位置
{
if(SEGx4_CODE[j].CHAR==*_STRG) //判断第k个字符的编码是否与输入字符相等
{
SEGx4_ShowData[i]=SEGx4_CODE[j].CODE;
i++;
break;
}
}
_STRG++;
}
}
//==================================================================================================
// 函数功能:SEGx4 显示 4位整型数字
// 函数标记:应用函数,完成,
// 函数说明:
//--------------------------------------------------------------------------------------------------
// 输入参量:_STRG:待显示的字符串;
// 输出参量:无
//==================================================================================================
void SEGx4_ShowNumbx4(unsigned int _NUMB)
{
unsigned char i,j; //定义局部变量,用于循环计数
unsigned char Numb_Arry[4]; //定义局部数组,用于存储变量
Numb_Arry[0]=_NUMB/1000 %10+0x30;
Numb_Arry[1]=_NUMB/100 %10+0x30;
Numb_Arry[2]=_NUMB/10 %10+0x30;
Numb_Arry[3]=_NUMB/1 %10+0x30;
for(i=0;i<4;i++)
{
for(j=0;j<32;j++) //循环32次,查询数码管字模位置
{
if(SEGx4_CODE[j].CHAR==Numb_Arry[i]) //判断第k个字符的编码是否与输入字符相等
{
SEGx4_ShowData[i]=SEGx4_CODE[j].CODE;
break;
}
}
}
}
//==================================================================================================
// 函数功能:SEGx4 T2 中断服务函数
// 函数标记:中断函数,完成,
// 函数说明:
//--------------------------------------------------------------------------------------------------
// 输入参量:无
// 输出参量:无
//==================================================================================================
void SEGx4_IRQHandler(void)
{
static unsigned char SEGx4_BITS=0; // 定义全局变量,用于循环数码管位数
SEGx4_BIT0=1;
SEGx4_BIT1=1;
SEGx4_BIT2=1;
SEGx4_BIT3=1;
//----------------------------------------------------------------------------------------------
// 段码
//----------------------------------------------------------------------------------------------
SEGx4_DATAPORT=SEGx4_ShowData[SEGx4_BITS];
//----------------------------------------------------------------------------------------------
// 位码
//----------------------------------------------------------------------------------------------
switch(SEGx4_BITS)
{
case 0:SEGx4_BIT0=0;SEGx4_BIT1=1;SEGx4_BIT2=1;SEGx4_BIT3=1;break;
case 1:SEGx4_BIT0=1;SEGx4_BIT1=0;SEGx4_BIT2=1;SEGx4_BIT3=1;break;
case 2:SEGx4_BIT0=1;SEGx4_BIT1=1;SEGx4_BIT2=0;SEGx4_BIT3=1;break;
case 3:SEGx4_BIT0=1;SEGx4_BIT1=1;SEGx4_BIT2=1;SEGx4_BIT3=0;break;
default:break;
}
//----------------------------------------------------------------------------------------------
// 循环移位
//----------------------------------------------------------------------------------------------
SEGx4_BITS++;
if(SEGx4_BITS>5)
{
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
简易频率计-第01A版.zip
(451.63 KB, 下载次数: 45)
2017-5-4 12:12 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1