历史上的今天
今天是:2024年12月30日(星期一)
2020年12月30日 | 单片机数字频率计仿真设计0~9000hz 数码管显示
2020-12-30 来源:51hei

/*************************************************************************
*实例名称:频率计
*实例说明:实现0~9000hz频率计的统计
*作者:yd
*时间:09.06.20
*************************************************************************/
#include "target.h"
#include "led.h"
uchar displayBuff[4]={'0','0','0','0'}; //数码管显示缓冲区,千,百,十,个
const uchar displayMode=0x00; //后四位分别对应缓冲区中每位的数据类型,1为任意字符显示,0为数字显示
void main()
{
uint get_fre;
target_init();
init_led();
sei();
while(1)
{
get_fre=get_fre_number();
if(get_fre/1000<0x0A)
{
displayBuff[0]=get_fre/1000+'0'; //计算频率千位,放在缓冲区第0位
}
displayBuff[1]=(get_fre/100)%10+'0'; //计算频率百位,放在缓冲区第1位
displayBuff[2]=(get_fre%100)/10+'0'; //计算频率十位,放在缓冲区第2位
displayBuff[3]=get_fre%10+'0'; //计算频率个位,放在缓冲区第3位
ledSweepDisplay(displayBuff,displayMode,0x04);//循环显示数码管缓冲区中数据
}
}
led.c文件:
#define LED_GLOBAL 1
#include "led.h"
/*******************************************************************************************
*函数名称:delay_us(uint us)
*函数功能:实现微秒级的延时
*函数入口:us,延时函数循环后期数
*函数出口:无
*******************************************************************************************/
void delay_us(uint us)
{
uint i;
while(us--)
{
for(i=0;i<100;i++);
}
}
/*******************************************************************************************
*函数名称:led_init(void)
*函数功能:四位七段数码管显示初始化
*函数入口:无
*函数出口:无
*******************************************************************************************/
void init_led(void)
{
LED=segLedCode[0];
LED_CS1=0;
LED_CS2=0;
LED_CS3=0;
LED_CS4=0;
}
/*******************************************************************************************
*函数名称:ledWrite(uchar c,uchar n,uchar mod)
*函数功能:对一组数码管的某一位进行短暂显示
*函数入口:c,要显示的数据;n,显示一组数码管中的第n位;mod,c的数据形式
*函数出口:无
*说明:当mod==DIGITAL时,c为数字0~9的ANCII码形式,此时在n位数码管上显示想用数字
当mod==CHARACTER,直接将c输出数据口
*******************************************************************************************/
void ledWrite(uchar c,uchar n,uchar mod)
{
if(CHARACTER==mod)
{
LED=c;
}
else if(DIGITAL==mod)
{
if((c-'0')<0x0a)
{
LED=segLedCode[c-'0'];
}
else
{
LED=segLedCode[0];
}
}
switch(n)
{
case 0x01:
{
LED_CS1=0;
delay_us(10);
LED_CS1=1;
break;
}
case 0x02:
{
LED_CS2=0;
delay_us(10);
LED_CS2=1;
break;
}
case 0x03:
{
LED_CS3=0;
delay_us(10);
LED_CS3=1;
break;
}
case 0x04:
{
LED_CS4=0;
delay_us(10);
LED_CS4=1;
break;
}
default:
break;
}
}
/*******************************************************************************************
*函数名称:ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
*函数功能:循环在数码管上显示缓冲区中的数据
*函数入口:segCode,指向显示缓冲区中的指针;segCodeMod,0~7位为1或0标示1~8位数码管显示的数据的类型(DIGITAL或者CHARACTER);segNumber,代表要显示数码管的位数
*函数出口:无
*说明:本函数主要实现将显示缓冲区中的数据在数码管上显示出来
*******************************************************************************************/
void ledSweepDisplay(uchar *segCode,uchar segCodeMod,uchar segNumber)
{
uchar segCount;
for(segCount=0;segCount if(segCodeMod&0x01) /*1代表此处显示任意字符 */ { ledWrite(segCode[segCount],segCount+1,CHARACTER); } else { ledWrite(segCode[segCount],segCount+1,DIGITAL); } segCodeMod=segCodeMod>>1; } }
上一篇:51单片机手机拨号模块
下一篇:单片机课程设计抢答器
史海拾趣
|
新型彩电很多机型已经采用IIC总线控制方式。IC总线受干扰,就会产生许多无法用常规分析硬件损坏的故障解释。所以,如遇到综合性的故障问题,或无法理解的问题,可试着用IC总线受干扰的方式来进行分析。 1. 电源输出的直流电压滤波不良,散射的 ...… 查看全部问答> |
|
入门级的,麻烦高人们指点,做pspice仿真,首先画电路图,schematic中的电路,耦合电感器件没有找到?能告诉我它在哪儿吗?要异名端的,其中一端是并联的。 O(∩_∩)O谢谢… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 据外电报道,美国亚马逊公司近日宣布,该公司6月适用于电子书阅读器KINDLE的电子书销量达到了纸质图书的1.8倍。 亚马逊没有透露具体销量。4~6月的电子图书销量为纸质图书的1.4倍。今年上半年 ...… 查看全部问答> |
|
microchip提供的ZIGBEE2006协议不完全,大家不要上当! microchip提供的ZIGBEE2006协议不完全,大家不要上当!我现在好麻烦啊,不行只能该用TI的了。当时因为他们提供源码,没想到后面的麻烦不小。… 查看全部问答> |
|
max485的RO接PD2,DI接PD3,RE和DE接PD1,代码如下: #define CRYSTAL2 14745600 #define BAUD3 9600 //485波特率采用9600bps#define BAUD_SETT ...… 查看全部问答> |
|
锂离子电池的组成可简单地表示为: 上式中M表示Co、Ni、Mn等金属,负极C表示石墨等碳材料。充电时Li+从正极脱嵌下来,经过电解液嵌入负极石墨等材料中;放电时则相反,Li+从负 极再嵌入到正极中。在充放 ...… 查看全部问答> |




