历史上的今天
返回首页

历史上的今天

今天是: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;

        }

}


推荐阅读

史海拾趣

博通集成(BEKEN)公司的发展小趣事

博通集成深知技术创新是企业发展的核心动力。因此,公司始终保持高额的研发投入,不断推动技术创新和产品研发。公司拥有一支专业的研发团队,具备强大的研发实力和创新能力。通过持续的研发投入和技术创新,博通集成在无线连接芯片设计领域取得了显著的成果和进展。

DZUS公司的发展小趣事

进入XX年代,DZUS公司面临了来自国内外竞争对手的严峻挑战。为了保持市场领先地位,公司加大了对技术创新的投入。研发团队成功开发了一系列新型紧固件,不仅提高了产品的性能和可靠性,还降低了生产成本。这些创新产品帮助DZUS公司巩固了市场地位,并赢得了更多客户的信赖。

HCC Industries公司的发展小趣事

近年来,随着全球对环境保护和可持续发展的重视,HCC Industries积极响应号召,制定了绿色可持续发展战略。公司加大了对环保技术和绿色产品的研发投入,推出了一系列符合环保标准的微电子部件产品。同时,HCC还通过优化生产工艺和节能减排措施,降低了生产过程中的能源消耗和污染排放。这一战略不仅赢得了客户和消费者的广泛赞誉,也为公司带来了更加可持续的发展前景。

Floeth Electronic Ltd公司的发展小趣事

近年来,随着全球对环境保护和可持续发展的重视,HCC Industries积极响应号召,制定了绿色可持续发展战略。公司加大了对环保技术和绿色产品的研发投入,推出了一系列符合环保标准的微电子部件产品。同时,HCC还通过优化生产工艺和节能减排措施,降低了生产过程中的能源消耗和污染排放。这一战略不仅赢得了客户和消费者的广泛赞誉,也为公司带来了更加可持续的发展前景。

Alliance Memory公司的发展小趣事

面对日益激烈的市场竞争和快速变化的市场需求,HCC Industries在2020年启动了数字化转型计划。公司投入大量资金引入先进的自动化生产线和智能化管理系统,实现了从原材料采购到成品出厂的全链条数字化管理。这一举措不仅大幅提高了生产效率和产品质量,还降低了运营成本和库存风险。同时,HCC还利用大数据和人工智能技术优化产品设计和市场策略,进一步提升了其市场竞争力。

FREESCALE (NXP)公司的发展小趣事

近年来,随着全球对环境保护和可持续发展的重视,HCC Industries积极响应号召,制定了绿色可持续发展战略。公司加大了对环保技术和绿色产品的研发投入,推出了一系列符合环保标准的微电子部件产品。同时,HCC还通过优化生产工艺和节能减排措施,降低了生产过程中的能源消耗和污染排放。这一战略不仅赢得了客户和消费者的广泛赞誉,也为公司带来了更加可持续的发展前景。

问答坊 | AI 解惑

干扰I2C总线的几种情况

新型彩电很多机型已经采用IIC总线控制方式。IC总线受干扰,就会产生许多无法用常规分析硬件损坏的故障解释。所以,如遇到综合性的故障问题,或无法理解的问题,可试着用IC总线受干扰的方式来进行分析。 1. 电源输出的直流电压滤波不良,散射的 ...…

查看全部问答>

pspice中的耦合电感在哪儿啊?

入门级的,麻烦高人们指点,做pspice仿真,首先画电路图,schematic中的电路,耦合电感器件没有找到?能告诉我它在哪儿吗?要异名端的,其中一端是并联的。 O(∩_∩)O谢谢…

查看全部问答>

亚马逊统计显示:电子书销售达纸质书1.8倍

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 据外电报道,美国亚马逊公司近日宣布,该公司6月适用于电子书阅读器KINDLE的电子书销量达到了纸质图书的1.8倍。 亚马逊没有透露具体销量。4~6月的电子图书销量为纸质图书的1.4倍。今年上半年 ...…

查看全部问答>

中断里面为什么不能用printf 啊

中断里面为什么不能用printf 啊…

查看全部问答>

AT指令是基于什么开发出来的

就是我想通过3G的网络发送自己的控制命令,但貌似AT指令不能满足,哪位高手解答一下啊!…

查看全部问答>

请教高手,如何查看导出lib时导出了哪些函数?

  如题,困扰了好几天了,请高手指教…

查看全部问答>

microchip提供的ZIGBEE2006协议不完全,大家不要上当!

microchip提供的ZIGBEE2006协议不完全,大家不要上当!我现在好麻烦啊,不行只能该用TI的了。当时因为他们提供源码,没想到后面的麻烦不小。…

查看全部问答>

请教下atmega126的485通讯端口设置

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+从负 极再嵌入到正极中。在充放 ...…

查看全部问答>