精华内容
下载资源
问答
  • 本系统拟采用单片机和FPGA的结合进行系统的主体设计,系统原理框图如图1 所示。  图1 出租车计费系统总体原理框图  测控FPGA芯片通过采集传感器脉冲信号WCLK进行里程计算、里程计费,利用外部脉冲信号SCLK产生...
  • 根据系统设计要求,数据采集系统控制器SJCJKZQ可由四个模块组成:A/D转换控制模块ADZHKZ、数据运算与处理模块SJYSCL、D/A转换控制模块DAZHKZ以及有关键盘输入与数据显示控制模块JPXSKZ,其组成框图及有关接口如图所...
  • 电路系统原理框图如图1 所示,其中单片机完成整个测量电路的测试控制、数据处理和显示输出;CPLD/FPGA完成各种测试功能;键盘信号由AT89C51单片机进行处理,它从CPLD/FPGA读回计数数据并进行运算,向显示电路输出...
  • 控制系统软件设计框图如图1所示,软件上包括系统初始化模块、起动加速模块、换相控制模块、速度计算模块、I/O控制模块。  系统初始化模块分配存储器空间和各个程序变量,主要完成DSP的一些基本配置、时间管理器...
  • STM32数字示波器系统总体设计框图 STM32数字示波器演示视频: 电路城语:此资料为卖家免费分享,不提供技术支持,请大家使用前验证资料的正确性!如涉及版权问题,请联系管理员删除! STM32数字示波毕业论文至附件下载
  • 根据系统设计要求,数据采集系统控制器SJCJKZQ可由四个模块组成:A/D转换控制模块ADZHKZ、数据运算与处理模块SJYSCL、D/A转换控制模块DAZHKZ以及有关键盘输入与数据显示控制模块JPXSKZ,其组成框图及有关接口如图所...
  • 摘 要 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。文章中采用了专门的芯片组成了PWM信号的发生系统,并且对PWM信号的原理、产生方法以及如何通过... 图1.1系统总体设计框图
  • 目 录 摘要 2 1 引言 3 2 方案设计 4 2.1 系统设计方案论证 4 2.1.1第一方案 4 2.1.2 第二方案 4 2.2第二方案的总体设计框图 4 3 系统硬件部分 5 3.1主控芯片 5 3.2 滤波电路及LM324芯片 7 3.3 显示设备 8 3.4 控制...
  • 关于基于51单片机的MP3的总体设计

    千次阅读 2016-09-16 23:18:01
    一个MP3项目包含了许多模块,在画原理图之前需要弄清楚具体是哪几个模块,在编写程序之前要弄清楚MP3的工作流程,所以整体设计是一个非常重要的步骤,以下是我们本次做的MP3的大体设计。  硬件模块: 单片机主...
    

    一个MP3项目包含了许多模块,在画原理图之前需要弄清楚具体是哪几个模块,在编写程序之前要弄清楚MP3的工作流程,所以整体设计是一个非常重要的步骤,以下是我们本次做的MP3的大体设计。 

    硬件模块:

    单片机主控制器模块

    音频解码模块

    SD卡读取模块

    USB设备接口模块

    U盘存储模块

    LCD显示模块

    按键选择模块

     

    硬件系统:

    框图:

     

    软件模块:

    1.VS1003解码,即VS1003译码程序,VS1003通过同步串行总线SPI与单片机进行命令和数据的传输。系统启动后,由MCU控制将存储于U盘中的歌曲的码流信息送入到VS1003芯片中,通过VS1003芯片解码以及其内含的高质量的立体声DAC和耳机驱动电路,实现MP3歌曲的播放功能。

     

    2.USB总线的通用接口CH375

    CH375挂接到MCU系统总线上,MCU通过CH375按照相应的USB协议与其他设备进行通信。

     

    3.LCD液晶显示

    软件主系统流程图

    展开全文
  • DS18B20数字温度计设计

    千次阅读 多人点赞 2018-05-15 13:26:33
    1三、设计方案的总体设计框图. 13.1硬件电路框图. 13.2硬件电路概述. 23.3主控电路. 23.4显示电路. 23.5报警温度调节电路. 33. 7硬件电路连接引脚说明. 43. 8单片机硬件连接实物图及实验结果. 4四、系统软件...

     

    一、单片机简介

    单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。 由此来看,单片机有着微处理器所不具备的功能,它可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。    

    然而单片机又不同于单板机,芯片在没有开发前,它只是具备功能极强的超大规模集成电路,如果赋予它特定的程序,它便是一个最小的、完整的微型计算机控制系统,它与单板机或个人电脑(PC机)有着本质的区别,单片机的应用属于芯片级应用,需要用户了解单片机芯片的结构和指令系统以及其它集成电路应用技术和系统设计所需要的理论和技术,用这样特定的芯片设计应用程序,从而使该芯片具备特定的功能。    

    不同的单片机有着不同的硬件特征和软件特征,即它们的技术特征均不尽相同,硬件特征取决于单片机芯片的内部结构,用户要使用某种单片机,必须了解该型产品是否满足需要的功能和应用系统所要求的特性指标。这里的技术特征包括功能特性、控制特性和电气特性等等,这些信息需要从生产厂商的技术手册中得到。软件特征是指指令系统特性和开发支持环境,指令特性即我们熟悉的单片机的寻址方式。

    二、设计任务和要求

    (一).设计目的

    1.掌握单片机拓展总线的工作原理和时序操作;

    2.掌握单总线协议的基本特点及通信过程;

    3.掌握数字温度传感器DS18B20的基本特点及单总线控制协议;

    4.掌握单片机IO端口模拟单总线时序控制程序的编写方法;

    5.掌握LCD液晶显示器的显示驱动方法。

    (二).设计要求

    1.单片机P0.0和DS18B20的数据端相连;

    2.编写单片机通过IO端口模拟单总线时序控制DS18B20的程序,读出温度;

    3.在1602字符点阵液晶显示模块上显示温度;

    4.单片机拓展总线的地址线和LCD的控制线的编写方法。

    三、设计方案的总体设计框图

    3.1硬件电路框图

     

     

     

     

     

     

     

     

     

     

     


    3.2硬件电路概述

    硬件:PC机,

           nKDE—51单片机实验教学系统

    1)将CPU板上的单片机P1.0~P1.3(J2或J6的1~4号引脚)和模拟总线接口IO板上的J4相连。

    2)将CPU板上的单片机P2(J3或J7)和模拟总线接口IO板上的J5相连,注意P2.0和J5的第1脚相连。

    3)将CPU板上的单片机P0.0(J1或J5的1号引脚)和模拟总线接口IO板上DS18B20的DBUS(J9的1号引脚)相连;将CPU板上的COM1和PC机相连。

    4)将CPU板上的单片机P3.7(J4或J8的8号引脚)和基本IO板上的蜂鸣器驱动位(J8的最低位)相连。

    5)将CPU板上的单片机P0(J1或J5)和基本IO板上的LED灯(J4)相连。

     

    3.3主控电路

    主程序需要调用2个子程序,分别为;

    1).实时温度显示子程序;驱动数码管把实时温度值送出在LED数码管显示

    2).温度显示、报警子程序;1602字符点阵液晶显示温度,当温度超过设定的报警温度值时产生报警,即驱动蜂鸣器鸣叫

     

    3.4显示电路

    温度显示模块需要调用10个子程序,分别为;

    1).LCM延时程序

    2).查询LCM的忙标志/当前AC地址程序

    3).LCM清屏程序

    4).向LCM写入控制字程序

    5).向LCM写入数据程序

    6).LCM初始化程序

    7).移动光标道X行、Y行程序

    8).在指定位置显示一个字符程序

    9).从指定的位置开始显示字符串程序

    10).将指定位置显示的字符闪烁

     

     

    3.5报警温度调节电路

    当温度小于22摄氏度时,只显示温度。温度大于等于22摄氏度小于23摄氏度,二极管全亮,显示屏警告。温度大于23摄氏度小于25摄氏度时,流水灯低速率循环亮,蜂鸣器Be一声间隔响。温度大于25摄氏度小于27摄氏度时,流水灯高速率循环亮,蜂鸣器Be一声间隔响,间隔时间变短。温度大于27摄氏度时,二极管常亮,蜂鸣器长响。

     

    3.6温度传感器DS18B20测温原理

    数字温度传感器模块

       1.DS18B20性能

    1).独特的单线接口仅需一个端口引脚进行通信

    2).简单的多点分布应用

    3).无需外部器件

    4).可通过数据线供电

    5).零待机功耗

    6).测温范围-55~+125℃,以0.5℃递增

    7).可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃

    8).温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字

    9).应用包括温度控制、工业系统、消费品、温度计和任何热感测系统

    10).负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作

      2.DS18B20时序图

           主机使用时间隙来读写DS18B20的数据位和写命令字的位。

    初始化时序如下图:

     

     

    3. 7硬件电路连接引脚说明

    1)将CPU板上的单片机P1.0~P1.3(J2或J6的1~4号引脚)和模拟总线接口IO板上的J4相连。

    2)将CPU板上的单片机P2(J3或J7)和模拟总线接口IO板上的J5相连,注意P2.0和J5的第1脚相连。

    3)将CPU板上的单片机P0.0(J1或J5的1号引脚)和模拟总线接口IO板上DS18B20的DBUS(J9的1号引脚)相连;将CPU板上的COM1和PC机相连。

    4)将CPU板上的单片机P3.7(J4或J8的8号引脚)和基本IO板上的蜂鸣器驱动位(J8的最低位)相连。

    5)将CPU板上的单片机P0(J1或J5)和基本IO板上的LED灯(J4)相连。

     

     

     

     

     

     

     

    3.8单片机硬件连接实物图及实验结果

    连接实物图:

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    实验结果:

    (1)低于22摄氏度时,正常:LED灯不亮,蜂鸣器不响,显示屏不警报

     

     

     

     

     

     

     

     

     

     

     

     

    (2)22~23摄氏度时,二极管常亮,显示屏警报,蜂鸣器不响

     

     

     

     

     

     

     

     

     

     

     

     

    (3) 温度大于23摄氏度小于25摄氏度时,流水灯低速率循环亮,蜂鸣器Be一声间隔响。温度大于25摄氏度小于27摄氏度时,流水灯高速率循环亮,蜂鸣器Be一声间隔响,间隔时间变短。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    (4) 温度大于27摄氏度时,二极管常亮,蜂鸣器长响。

     

     

     

     

     

     

     

     

     

     

     

    (5)串口显示:超过21摄氏度,警报,低于21摄氏度,警报消除

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    四、系统软件算法设计

    4.1主程序

    主程序mian.c需要调用2个子程序,分别为:

    1、实时温度显示子程序:驱动数码管把实时温度值送出在LED数码管显示

    2、温度显示、报警子程序:1602字符点阵液晶显示温度,当温度超过设定的报警温度值时产生报警,即驱动蜂鸣器鸣叫。

    见附录一;

    4.2 子程序

    1、实时温度显示子程序:驱动数码管把实时温度值送出在LED数码管显示

    2、温度显示、报警子程序:1602字符点阵液晶显示温度,当温度超过设定的报警温度值时产生报警,即驱动蜂鸣器鸣叫。

    见附录二;

     

    五、总结与体会

     5.1 课程设计过程中遇到的问题及解决方法总结

    (1)出现 requires ANSI-styleprototype

    分析:函数声明出错,声明函数时,需要注意大小写的问题keil软件中,无法自动识别。

    解决:仔细查看,修改。

    (2)多余函数未调用,UNCALLEDSEGMENT,IGNORED FOR OVERLAY PROCESS

    分析:教材上定义函数,应该都利用到了,此时应该思考,是否打错问题。

    解决:由于惯性思维,空函数(_nop()_)定义头文件是,打的strings.h。

    所以出现了,函数未调用,占用多余空间的问题。

    (3)出现 illegal pointerconversion 非法指针转换

    分析:可疑指针转换

    解决:查看被调用的函数原型,检查入口参数是否是与原型一致的函数。

    (4)显示屏无法正常显示

    分析;无法显示的几种原因:

    1)程序错误;2)器件损坏;3)电路链接错误;4)串口链接失败

    解决:1)将程序导入其他单片机系统,运行成功,排除。

       2)换线和显示屏,还是显示不出来。

       3)仔细查看电路链接,发现控制显示屏的IO 板上J4与单片机J1相连接,正确连接之后,显示屏正常显示。

    (5)串口显示杂乱

    分析:可以通过换行,使得想要查询的内容,即温度,更清晰的看见。

    解决:修改程序,进行换行处理:

    printf("\r\nTemperature code HI=%02bX,LO=%02bX ",tmph,tmpl);

    if(t.z>=22)

                  printf("\nWarning!!!Temperature = %d.%04d",t.z,t.x) ;         //大于22度温度警告

                  else

            printf("\r\n Temperature = %d.%04d",t.z,t.x);

     

    5.2 课程设计体会

    在本次课程设计中,让我受益匪浅,无论是专业知识上还是学习态度上,都有很大改变。

    专业知识上,之前都是在课上听老师讲课,和对着课本记忆各种指令,程序,用法,通过这次课设,真正接触到了单片机,它各个接口的含义,在课程设计中渐渐得到更深的了解,记忆也更加深刻。

    学习态度上,首先,不能惯性思维,在接触到新的知识的时候,仔细研究,而不是根据以往经验,泛泛而谈;其次,不能粗心大意,课程设计的程序很多,稍作不注意就会拼写错误,或者大小写出问题,以至于Target not creat;最后,遇到问题,要善于去解决,,在每次弄清楚自己的错误,解决运行成功的时候,很是满足,很有成就感,相信做其他事也是这样,不断探索,会有意想不到的收获。

    这次课程设计,得到了老师和同学的帮助,很是感谢。

     

    六、参考文献

    [1]李广弟等.单片机基础[M].北京航空航天出版社,2001.

    [2]王东峰等.单片机C语言应用100例[M].电子工业出版社,2009.

    [3]陈海宴.51单片机原理及应用[M].北京航空航天大学出版社,2010.

    [4]刘守义等.单片机技术基础[M].西安电子科技大学出版社,2007.

     

     

    附录一:

    main.c:
    #include <reg51.h>

    #include <intrins.h>

    #include <stdio.h>

    #include "lcm16x2p.h"

    #include "DS18B20.h"

     

    #define OSC 11059200            //晶振频率

    #define BAUDRATE 9600    //波特率

    #define LCM_DB P2

     

    sbit BUZ_CON = P3^7;

    sbit LED =P0;

     

    void main(void){

           unsigned charucTH,ucTL,Ticks;             //中断程序

        unsigned int i;

           unsigned char tmph,tmpl;

           Temp t;

        unsigned charstrTemp[6];   //显示到屏幕的温度数据

       

           LCM_BLC = 0;                     //开背光

           TMOD = 0x21;                  //选择方式2作为波特率发生器

           SCON = 0x50;                   //串口方式1,允许中断

           PCON |= 0x80;                 //SMOD=1

           TL1 = 256 -(OSC/12/16/BAUDRATE);

           TH1 = 256 -(OSC/12/16/BAUDRATE);

           TR1 = 1;                                          //启动定时器

           TI = 1;                                      //TI有效

       

        //检测DS18B20温度传感器是否存在并复位传感器

           if(DSReset())

               printf("\r\Temp sensor ResetOK!");

           else  printf("\r\Temp Sensor Notready!");

       

        while(1){

              DSReset();      //复位传感器

               Delay(12);

               DSWriteByte(SkipROM);                  //跳读 省时

              DSWriteByte(StartConvert);                  //温度转换

              for(i=0;i<40000;i++); 

              DSReset();

           Delay(12);

              DSWriteByte(SkipROM);

               DSWriteByte(ReadMemory);   //读RAM程序

               tmpl = DSReadByte();

              tmph = DSReadByte();

            printf("\r\nTemperature code HI=%02bX,LO=%02bX ",tmph,tmpl);

              DSReadTemp(&t);

                  //准备输出到显示屏的数据

           strTemp[0]=t.z/10+0x30;     //十位

            strTemp[1]=t.z%10+0x30;     //个位

            strTemp[2]='.';                         //小数点

           strTemp[3]=t.x/1000+0x30;   //十分位

           strTemp[4]=t.x%1000/100+0x30;   //百分位

            strTemp[5]='C';

     

                  if(t.z>=22)

                  printf("\nWarning!!!Temperature= %d.%04d ",t.z,t.x) ;             //大于22度温度警告

                  else

            printf("\r\nTemperature = %d.%04d",t.z,t.x);

     

                  if(t.z>=22&&t.z<23){

                  P0=0x00;                    //大于22小于23度LED灯全亮

                  }

                  else

                  {

                  P0=0xff;                     //灯灭

                  }

     

                  if(t.z>=23){

                  BUZ_CON=0;

               LCMDelay(100);

                  BUZ_CON=1;

                  P0=0xfe;

                  LCMDelay(60);

                  P0=0xfd;

                  LCMDelay(60);

                  P0=0xfb;

                  LCMDelay(60);

                  P0=0xf7;

                  LCMDelay(60);

                  P0=0xef;

                  LCMDelay(60);

                  P0=0xdf;

                  LCMDelay(60);

                  P0=0xbf;

                  LCMDelay(60);

                  P0=0x7f;

                  LCMDelay(60);

                  P0=0xff;                      //大于23度流水灯亮,蜂鸣器响

                    if(t.z>=25)

                    {

                     BUZ_CON=0;

                     LCMDelay(100);

                     BUZ_CON=1;

                         P0=0xfe;

                         LCMDelay(20);

                         P0=0xfd;

                         LCMDelay(20);

                         P0=0xfb;

                         LCMDelay(20);

                         P0=0xf7;

                         LCMDelay(20);

                         P0=0xef;

                         LCMDelay(20);

                         P0=0xdf;

                         LCMDelay(20);

                         P0=0xbf;

                         LCMDelay(20);

                         P0=0x7f;

                         LCMDelay(20);

                         P0=0xff;         //大于25度流水灯速率变快蜂鸣器间隔时间变短

                 }

                    if(t.z>=27)

                    {

                      BUZ_CON=0;

                         P0=0x00;                    //大于27度时,流水灯长亮,蜂鸣器长响

                    }

           }

                 else{

                    BUZ_CON=1;          //蜂鸣器不响

                    }

            /* 初始化*/

            EA = 0;  //  停止所有中断

            Ticks = 0;

            ucTH =(65536-OSC/12/20)/256; //  计算 50ms 定时的时间常数

            ucTL =(65536-OSC/12/20)%256;

            TMOD = 0x01; // T0:模式 1,16 位定时器

            TH0 = ucTH;

            TL0 = ucTL;

            ET0 = 1; // T0 允许中断

            TR0 = 1; //  启动定时器

            EA = 1; //  打开总中断允许

            

                  /*输出温度数据到显示屏 */

            LCMInit();                       //初始化LCM显示器

            LCMClear();             //清屏

           

                  if(t.z>=22){

                  LCMDisplayString(0,0,"TempWarning!!!"); //大于22度警告   

                  LCMDisplayString(1,0,"Temp:");    

                  LCMDisplayString(1,6,strTemp);              

                  }

                  else{

            LCMDisplayString(0,0,"Temperature:");

           LCMDisplayString(1,0,strTemp);   

                  }

                 

            //闪烁(刷新)

            for(i = 0; i < 16;i++)

               LCMBlink(0,i,BLINK);

            for(i = 0; i < 16;i++)

               LCMBlink(1,i,BLINK);

        }

    }

    附录二:

    DS18B20.h

    #ifndef __DS18B20H__

     

    #define __DS18B20H__

    #define ReadROM 0x33

    #define MatchROM 0x55

    #define ReadMemory 0xBE

    #define SkipROM 0xCC

    #define SearchROM 0xF0

    #define StartConvert 0x44   //变换指令

     

    typedef struct{

        int z;  //整数部分

        int x;  //小数部分

    }Temp;

     

    extern unsigned char ucTH,ucTL,Ticks;    //外部引用

     

    void Delay(unsigned int);

    bit DSReset(void);

    void DSWriteByte(char);

    unsigned char DSReadByte(void);

    void DSReadTemp(Temp *t);

     

    #endif

    DS18B20.c

    #include "DS18B20.h"

    #include <reg51.h>

    #include <intrins.h>

     

    sbit DQ = P0^0;

    /*

    Delay

    通过循环计时

    参数:int,表示要延时的 毫秒 数

    */

    void Delay(unsigned int i)

    {

       

        while(i--);

    }

    /*

    DSReset

    复位DS18B20并返回是否存在

    */

    bit DSReset(void)

    {

        bit x;

        DQ = 1;

        Delay(8);

        DQ = 0;        // 主机拉低总线

        Delay(80);          // 延时约 500 个机器周期

        DQ = 1;               //  主机释放总线

        Delay(8);              //  延时 60 个机器周期

        x = DQ;

        Delay(20);

           if(x == 0)

            return 1;

           else return 0;

    }

    /*

    DSWriteByte

    向 DS18820  写入一个字节

    */

    void DSWriteByte(unsigned char c)

    {

        unsigned char ic;

           for( ic = 0; ic < 8;ic++ )

           {

               DQ = 0;              //主机拉低总线,开始写位

               DQ = c&0x01;

            Delay(5);           //延时60个机器周期

            DQ = 1;                       //释放总线

            c >>= 1;

           }

    }

    /*

    DSReadByte

    从温度传感器读出一个字节

    返回:读出的字节

    */

    unsigned char DSReadByte(void)

    {

        unsigned char c,ic;

        c = 0;

        for(ic = 0; ic < 8;ic++)

           {

            DQ = 0;

            c >>= 1;              //右移

            DQ = 1;

            if(DQ )

                c |= 0x80;

            Delay(4);

        }

        return c;

    }

    /*

    DSReadTemp

    读出温度

    参数:温度(由整数和小数部分构成)

    */

    void DSReadTemp(Temp *t)

    {

        unsigned char tmpl,tmph;

           DSReset();

        Delay(12);

           DSWriteByte(SkipROM);

           DSWriteByte(StartConvert);

           DSReset();

           Delay(12);

           DSWriteByte(SkipROM);

           DSWriteByte(ReadMemory);

           tmpl = DSReadByte();

           tmph = DSReadByte();

           t->z =(int)((tmph&0x07)<<4 | (tmpl&0xf0)>>4);

           t->x =(int)((tmpl&0x0f)*625);

    }

    /*

    T0ISR

    50ms中断服务程序

    */

    void T0ISR(void) interrupt 1

    {

           unsigned charucTH,ucTL,Ticks;

           TH0 = ucTH;

           TL0 = ucTL;

           TR0 = 1;

           Ticks ++;

           if(Ticks == 20)

           {

        Ticks = 0;

           }

    }

    lcm16x2p.h

    #ifndef LCM16X2_H

    #define LCM16X2_H

    #define BUSYFLAG 0x80   //忙标志

    #define BLINK 0x01             //闪烁

    #define NOBLINK 0x00        //不闪烁

     

    sbit LCM_RS = P1 ^ 0;

    sbit LCM_RW = P1 ^ 1;

    sbit LCM_E = P1 ^ 2;

    sbit LCM_BLC = P1 ^ 3;

     

    unsigned char LCMReadState(void);

    void LCMDelay(int);

    void LCMWriteCmd(unsigned char);

    void LCMWriteData(unsigned char);

    void LCMInit(void);

    void LCMClear(void);

    void LCMGotoXY(unsigned char, unsigned char);

    void LCMDisplayString(unsigned char, unsigned char, unsigned char*);

    void LCMBlink(unsigned char, unsigned char, unsigned char);

    #endif

    lcm16x2p.c

    #include <reg51.h>

    #include <intrins.h>          //因为程序中出现了_nop_()空指令

    #include "lcm16x2p.h"

     

    #define LCM_DB P2

    /*

    LCMDelay

    通过循环方式延时

    int 表示要延时的毫秒数

    */

    void LCMDelay(int ms) {

           unsigned int dataDelayConst = 125;

           unsigned int i, cnt;

           cnt = DelayConst * ms;

           for (i = 0; i < cnt;i++);

    }

    /*

    LCMReadState

    查询LCM的忙标志/当前AC地址

    返回:BYTE,最高bit为1表示忙,为0表示闲

    */

    unsigned char LCMReadState(void){

           unsigned char state;

           LCM_E = 0;                               //E为总线周期有效显示,低电平无效

           LCM_RS = 0;                         //RS为寄存器选择线,低电平指令寄存器操作

           LCM_RW = 1;                             //RW为读写选择线,高电平读操作

           LCM_E = 1;                           //高电平有效

           _nop_();                         //空指令,较为精确的控制延迟时间

           _nop_();

           state = LCM_DB;

           LCM_E = 0;

           return state;

    }

    /*

    LCMClear

    清屏

    */

    void LCMClear(void){

           LCMDelay(1);

           LCM_E = 0;

           LCM_RS = 0;                        //指令寄存器

           LCM_RW = 0;                      //写操作

           LCM_DB = 0x01;

           LCM_E = 1;

           _nop_();                      //空指令,较为精确的控制延迟时间

           _nop_();

           LCM_E = 0;

           LCMDelay(1);

    }

    /*

    LCMWriteCmd

    向LCM写入控制字

    BYTE,命令字节。写入前不判断忙表示(因为初始化过程中不能判断)

    */

    void LCMWriteCmd(unsigned char cmd){

           LCMDelay(1);

           LCM_E = 0;

           LCM_RS = 0;

           LCM_RW = 0;

           LCM_DB = cmd;

           LCM_E = 1;

           _nop_();

           _nop_();

           LCM_E = 0;

    }

    /*

    LCMWriteData

    向LCM写入数据

    BYTE,将要写入数据

    */

    void LCMWriteData(unsigned char dc){

           LCM_RS = 1;

           LCM_RW = 0;

           LCM_DB = dc;

           LCM_E = 1;                        //高电平有效

           _nop_();

           _nop_();

           LCM_E = 0;

    }

    /*

    LCMInit

    初始化LCM

    DWORD,晶体频率(Hz),供计算延时参数

    */

    void LCMInit(void)

    {

           LCMDelay(60);                           //延时60ms,等待LCM复位

           LCMWriteCmd(0x38);                        //功能设置:8位接口,2行,5x7字符点阵

           LCMDelay(5);                              //延时

           LCMWriteCmd(0x38);                              //第二次

           LCMDelay(1);                                     //延时

           LCMWriteCmd(0x38);                                   //此后可以通过监测忙标志判断指令执行情况

           while(LCMReadState()& BUSYFLAG);

           LCMWriteCmd(0x08);                                   //关闭显示

           while(LCMReadState()& BUSYFLAG);

           LCMWriteCmd(0x01);                                     //清屏

           while(LCMReadState()& BUSYFLAG);

           LCMWriteCmd(0x06);                                      //显示地址自动增量,整体不移位

           while(LCMReadState()& BUSYFLAG);

           LCMWriteCmd(0x0e);                                   //开显示,开光标,不闪烁

           while(LCMReadState()& BUSYFLAG);

    }

    /*

    LCMGotoXY

    移动光标到X行Y列

    BYTE,X行(0,1)Y列(横向,取值0~0x0f)

    */

    void LCMGotoXY(unsigned char x, unsigned char y) //     x;行(0~1)y;列(0~F)

    {

           unsigned char cmd;

           if(x == 0){

                  cmd = 0x80 | y;

           }

           else{

                  cmd = 0x80 | 0x40| y;

           }

           LCMWriteCmd(cmd);

           while(LCMReadState()& BUSYFLAG);

    }

     

    /*

    LCMDisplayChar

    在指定位置显示一个字符

    X行(0,1)Y列(横向,取值0~0x0f),ch表示将要显示的字符(ASSCII码)

    */

    void LCMDisplayChar(unsigned char x, unsigned char y, unsigned charch){

           LCMGotoXY(x,y);

           LCMWriteData(ch);

    }

     

    /*

    LCMDisplayString

    从指定位置开始显示字符

    X行(0,1)Y列(横向,取值0~0x0f),*str为指向将要显示的字符串的指针

    */

    void LCMDisplayString(unsigned char x, unsigned char y, unsignedchar* str){

            unsigned char ptr;

            ptr = 0;

            while(*(str+ptr) != 0)

            {

                   LCMDisplayChar(x, (y+ptr), *(str+ptr));

                   ptr++;

            }

    }

     

    /*

    LCMBlink

    将指定位置显示的字符闪烁(同时关闭光标)

    X行(0,1)Y列(横向,取值0~0x0f),cmd=BLINK:闪烁, NOBLINK:不闪烁

    */

    void LCMBlink(unsigned char x, unsigned char y, unsigned char cmd)

    {

           LCMGotoXY(x,y);

           if(cmd == BLINK)

           {

                  LCMWriteCmd(0x0d);

            }

           else

             {

                  LCMWriteCmd(0x0c);

             }        

    }

    展开全文
  • 图1给出该模块总体设计框图,其中,通过PCI桥扩展总线分别连接4片INTEL82551,由于INTEL82551内部已集成PCI接口,PCI桥可实现与INTEL82551之间的无缝连接。J1和J2为CPCI的接口插件。  2 CPCI总线结构模块  ...
  • 系统总体设计方案 本系统的总体设计框图如图1所示。 图1 系统框图 Nios II处理器在SDRAM中开辟帧缓冲(Frame buffer),可以是单缓冲也可以是双缓冲。以单缓冲为例。处理器将一帧图像数据(640×480×2Bytes,RGB...
  • 摘要:本方案中所设计的红外光通信装置,采用以红外线来传送音频信号的光电系统,由发射部分、接收部分和中继转发装置组成。发射部分与音响设备相连接... 1.1 系统总体设计框图  本耳机由发射模块和接收模块两部分组
  • 本系统的总体设计框图如图1所示。 图1 系统框图  Nios II处理器在SDRAM中开辟帧缓冲(Frame buffer),可以是单缓冲也可以是双缓冲。以单缓冲为例。处理器将一帧图像数据(640×480×2Bytes,RGB565,16bit)存入帧...
  •  图1为中频采样系统总体设计框图。由图1可知,该系统主要由驱动电路、A/D转换电路、时钟电路3部分组成。  1.1 驱动电路  信号A/D转换前往往需要进行以下处理:1)放大或衰减,使输入信号的电平与A/D转换器的...
  • 基于LM317的直流稳压电源设计

    万次阅读 多人点赞 2018-01-06 14:42:26
    总体设计框图 设计要求:电子设备中的直流电源,通常是由电网提供的220V/50Hz交流电,经过降压、整流、滤波、稳压等环节处理得到。输出电压的幅值稳定、平滑、变换效率高、负载能力强、输出电阻小、温度稳定性好...

    基于LM317的直流稳压电源设计

    总体设计框图

    这里写图片描述

    设计要求:电子设备中的直流电源,通常是由电网提供的220V/50Hz交流电,经过降压、整流、滤波、稳压等环节处理得到。输出电压的幅值稳定、平滑、变换效率高、负载能力强、输出电阻小、温度稳定性好电压的稳定性和带载能力。


    设计期望:电路接入幅值为220V、频率为50Hz的输入电压,通过电源变压器,将220V的电压幅值调整为合适的电路工作压值。通过电源变压器输送过来的交流电,再通过桥式整流电路,得到单方向全波脉动的直流电压。由于单方向全波脉动的直流电压中含有交流成分,为了获得平滑的直流电压,在整流电路的后面加一个滤波电路,以滤去交流成分,电容就起到这个作用;在滤波电路的后面再接一个基于LM317的集成稳压电路,以输出1.2-12v的连续可调直流信号,最后再次加上对称的电容以改善负载的瞬态效应,消除电路的高频噪音。

    电路设计

    原理图

    这里写图片描述

    模块设计

    降压模块

    这里写图片描述

    源变压器T的作用是将电网220V的交流电压变换成整流滤波电路所需要的交流电压Ui。变压器副边与原边的匝数比为n2/ n1=12/220=0.54545

    桥式整流电路

    这里写图片描述

    工作原理:

    选择容性负载单相桥式整流电路。它的四臂是由四只二极管构成,当变压器B次级的2端为正、3端为负时,二极管D3和D6因承受正向电压而导通,D4和D5因承受反向电压而截止。此时,电流由变压器2端通过D3,再经D6返回3端。当3端为正时,二极管D4、D5导通,D3、D6截止,电流则由3端通过D4流经后级电路,再经5返回2端。因此,与全波整流一样,在一个周期内的正负半周都有电流流过负载,而且始终是同一方向。


    相关计算:
    负载电压vL的平均值为 VL = 0.9V2
    直流电流为: IL = 0.9V2/R2
    流经每个二极管的电流为 ID = 0.5IL =0.45V2/R2
    0.45V2/R2 一般电网电压的波动范围为-10%到+10%之间,实际上选用的二极管的最大整流电流和最高反向电压应该留有大于10%的余量。

    1N4007参数:

    这里写图片描述

    经计算1N4007满足各项参数,顾可以选用作为桥式整流的二极管。

    滤波电路

    这里写图片描述

    电容滤波电路工作原理:这里写图片描述
    特点:二极管的导电角小于180° , 流过二极管的瞬时电流很大。输出直流电压提高, 脉动成分也降低,且 时间常数越大,VL越高。一般VL=(1.1-1.2)V2,实际工作中按下式选择滤波电容的容量这里写图片描述
    故电容滤波适用小电流,对整流管冲击电流大的电路


    稳压电路

    这里写图片描述

    LM317资料
    这里写图片描述
    这里写图片描述
    这里写图片描述
    由LM317的中文资料可知,输出电压在1.2-37V间波动,输出电流超过1.5A,仿照其标准应用搭建了稳压电路模块,选用5k欧姆滑动变阻器,理论电压最高可达27v,电阻与电容选值适中。

    软件仿真与硬件测试

    仿真

    输出波形:
    这里写图片描述
    这里写图片描述
    这里写图片描述

    由仿真得出结论,当输出电压过高时,输出波形容易出现杂波,此时信号不稳定。


    带负载(8欧姆)时输出电压电流:这里写图片描述

    可以看出输出电流较小,所以该电路不能驱动大负载,大功率的电路,其输出功率也在毫瓦级。

    硬件测试

    示波器检测输出波形这里写图片描述
    数码管显示(附加功能)
    这里写图片描述

    实物展示

    PCB板这里写图片描述
    实物图这里写图片描述

    心得体会

    • 本次实践算是第一次接触模拟电路的设计与具体的制作,总的来说还算简单,首先是电路的设计,参考了很多网上的资料,尤其是稳压模块,借鉴了芯片资料里的典型应用电路,这个过程中的难点是具体芯片型号与参数的选取,比如什么时候用电解电容,电阻具体的取值,二极管选择哪种型号,这些都是要考虑的,由于书本参考电路很多,所以设计过程中没有太多的困难。
    • 接下来就是具体的制作,由于条件有限,电路板是工场板发货,而元器件都是打包的,我只完成了焊接的工作,大一时就在科协接触过元件焊接,所以对我来说不是难事。电路板外的透明玻璃外壳起到了保护电路的作用,220v电源线外也加上了胶布以防止漏电,安全问题要时刻注意。
    • 调试的过程很顺利,输出信号稳定并且连续可调,最大输出12V,该电路板能够在数码管上显示当前的电压,输出端可以输出低频方波信号,这些都是电路板的附加功能,在此不做叙述。缺点是当输出到12V时信号不稳定,调节滑动变阻器旋钮没用反应,说明变阻器阻值可以选更小一点。
    • 希望以后能够更加深入模拟电路的设计制作,做到真正的学以致用,理论与实践结合。
    展开全文
  • 3.1总体设计框图 7 3.2系统工作原理 7 3.3总体设计工作原理图(见附录) 7 4硬件设计 8 4.1键盘显示模块电路图 8 4.1.1键盘扫描模块功能 8 4.1.2键盘扫描模块的工作原理[1] 8 4.1.3数码管显示原理[2] 9 4.2 8088...
  • 文中实现了以 8051为主控芯片、PTR8000无线数据传输模块为核心,围绕 PC机构建的无线生理参数采集系统,具体阐述了系统的总体设计框图、硬件电路设计和软件编程。该系统实现了人体脉搏波的远程无线测量,传输性能稳定,...
  • 针对数字化UPS,给出了系统总体设计框图,为提高系统控制程序的实时性,提出一种基于实时操作系统μC/OS-II的嵌入式UPS系统控制方案。通过对UPS控制系统结构与功能的分析,实现了μC/OS-II在TMS320LF2407A上的移植,...
  • 摘要:本方案中所设计的红外光通信装置,采用以红外线来传送音频信号的光电系统,由发射部分、接收部分和中继转发装置组成。发射部分与音响设备相连接,从... 1.1 系统总体设计框图  本耳机由发射模块和接收模块两部
  • 1 引言  滤波器就是选频电路,可允许一部分频率的信号通过,而抑制另一部分频率的信号,...图1为其系统总体设计框图。  图1中,可控增益放大器部分是以AD603作为核心器件,实现0~60 dB之间的增益调节。AD603为
  • FPGA的课程的大作业,我们选的是数字频率计设计。 总体设计要求: 可测量脉冲信号的频率 被测信号由100MHz的...总体设计框图: 子模块设计: - 分频模块: 结构图: 代码如下: module div( input cl...

    FPGA的课程的大作业,我们选的是数字频率计设计。下面分享一下代码,还有工程文件,还有自己写的论文(里面会有更加详细的介绍),希望可以对你有所启发。

    工程文件github地址

    开发环境:Vivado 2015.4+Modelsim(仅用于仿真波形)
    开发板:赛灵思公司 xc7a100tcsg324-1

    总体设计要求:

    • 可测量脉冲信号的频率
    • 被测信号由100MHz的系统时钟分频获得,频率为学号*1000 Hz
    • 测量结果在6位数码管上显示,高位若是零则不显示该位
    • 采用连续测量方式,每4秒为1个周期,其中1秒用于测量,3秒用于显示

    总体设计框图:

    在这里插入图片描述

    子模块设计:

    - 分频模块:

    结构图:
    在这里插入图片描述代码如下:

    module div(
        input clk_100mhz, //系统给定的时钟频率
        output clk_190hz, //数码管的动态扫描频率
        output reg clk_1Hz, //控制模块的驱动频率
        output reg fin  //输出待测试信号的频率
        );
    	reg [9:0] cnt0;
    	reg [30:0] cnt;
    	reg [18:0] cnt1;
    	
    	always @(posedge clk_100mhz)
    		cnt1 = cnt1 + 1;
    	assign clk_190hz = cnt1[18];
    	always @(posedge clk_100mhz)
    		if(cnt == 50000000) begin
    			cnt = 0;
    			clk_1Hz = ~clk_1Hz;
    		    end
    		else
    			cnt = cnt + 1;
    	always @(posedge clk_100mhz)
    		if(cnt0 == 499) begin  //生成的测试信号的频率为100KHz
    			cnt0 = 0;
    			fin = ~fin;
    		end
    		else
    			cnt0 = cnt0 + 1;
    
    endmodule
    

    被测频率本来要求是学号*1000Hz,但是我的学号无法被整除,所以无法度量频率计的的精度,更无法进行误差分析。所以才选取了100KHz作为测试频率。

    - 控制模块

    结构图:
    在这里插入图片描述
    code:

    module control(clk_1Hz, rst, count_en, latch_en, clear);  
      input clk_1Hz;  
      input rst;  //复位信号
      output count_en;  //计数使能
      output latch_en;  //锁存使能
      output clear;  //清零信号
      reg [2:0] state; //状态信号,用于控制各种使能信号  
      reg count_en;  
      reg latch_en;  
      reg clear;
           
      always @(posedge clk_1Hz or negedge rst)  
      if(!rst)   //复位信号有效  
        begin    //各种使能信号清零  
          state <= 3'b000;  
          count_en <= 1'b0;  
          latch_en <=1'b0;  
          clear <= 1'b0;  
        end  
         else    //遇到基准信号的下一个上升沿,状态变化一次,每次变化后状态持续1s  
        begin
          case(state)  
            3'b000:   
                begin //第一个上升沿到达,开始计数,计数1个基准信号周期内待测信号的上升沿个数,此个数即为待测信号的频率  
                count_en <= 1'b1;  //计数使能信号有效  
                latch_en <= 1'b0;  
                clear <= 1'b0;  
                state <= 3'b001;  
              end  
            3'b001:  
              begin  //第二个上升沿到达,计数完成,锁存使能信号有效,测得频率锁存至锁存器中  
                count_en <= 1'b0;  
                latch_en <=1'b1;  
                clear <= 1'b0;  
                state <= 3'b010;  
              end
            3'b010:  
              begin  //第三个上升沿到达,计数完成,锁存使能信号有效,测得频率锁存至锁存器中  
                count_en <= 1'b0;  
                latch_en <=1'b1;  
                clear <= 1'b0;  
                state <= 3'b011;  
              end
            3'b011:  
              begin  //第四个上升沿到达,计数完成,锁存使能信号有效,测得频率锁存至锁存器中  
                count_en <= 1'b0;  
                latch_en <=1'b1;  
                clear <= 1'b0;  
                state <= 3'b100;  
              end
            3'b100:   
              begin //第五个上升沿到达,清零使能信号有效,计数器清零,为下一次计数做准备  
                count_en <= 1'b0;
                clear <= 1'b1;   
                latch_en <=1'b1;   
                state <= 3'b000; //状态清零,进入下一次测量  
              end  
            default:  
              begin  
                count_en <= 1'b0;  
                latch_en <=1'b0;  
                clear <= 1'b0;  
                state <= 3'b000;  
              end     
          endcase        
        end  
        
        
    endmodule
    

    - 计数模块

    结构图:
    在这里插入图片描述
    code:

    module counter_10(en_in, rst, clear, fin, en_out, q);  
      input en_in; //输入使能信号  
      input rst;   //复位信号  
      input clear; //清零信号  
      input fin;   //待测信号  
      output en_out; //输出使能,用于控制下一个计数器的状态,当输出使能有效时,下一个模10计数器计数加1  
      output [3:0] q; //计数器的输出,4位BCD码输出  
        
      reg en_out;  
      reg [3:0] q;  
        
      always@ (posedge fin or negedge rst) //输入待测信号的上升沿作为敏感信号  
      if(!rst) //复位信号有效,计数器输出清零  
          begin  
            en_out <= 1'b0;  
            q <= 4'b0;  
          end  
        else if(en_in) //进位输入使能信号有效  
          begin  
            if(q == 4'b1001) //若q = 4'b1001的话,q清零,同时进位输出使能有效,即en_out 赋值为1'b1  
              begin  
                q <= 4'b0;  
                en_out <= 1'b1;  
              end  
                 else //若q未达到4'b1001时,每到达待测信号的一个上升沿,q加1,同时输出进位清零  
              begin  
                q <= q + 1'b1;  
                en_out <=1'b0;  
              end  
          end   
        else if(clear) //若清零信号有效,计数器清零,用于为下一次测量准备  
          begin  
            q <= 4'b0;  
            en_out <= 1'b0;  
          end  
        else  
        begin  
        q <= q;  
        en_out <=1'b0;  
        end   
        
    endmodule
    
    

    锁存模块

    结构图:
    在这里插入图片描述
    code:

    module latch(clk_1Hz, latch_en, rst, q0, q1, q2, q3, q4, q5, q6, q7,  
                d0, d1, d2, d3, d4, d5, d6, d7);            
      input clk_1Hz, latch_en, rst;  
      input[3:0] q0, q1, q2, q3, q4, q5, q6, q7;  
      output[3:0] d0, d1, d2, d3, d4, d5, d6, d7;  
      reg[3:0] d0, d1, d2, d3, d4, d5, d6, d7;  
      always@ (posedge clk_1Hz or negedge rst)  
      if(!rst) //复位信号有效时输出清零  
        begin  
          d0 <= 4'b0; d1 <= 4'b0; d2 <= 4'b0; d3 <= 4'b0; d4 <= 4'b0;  
          d5 <= 4'b0; d6 <= 4'b0; d7 <= 4'b0;  
        end  
      else if(latch_en) //锁存信号有效时,将计数器的输出信号锁存至锁存器  
        begin  
          d0 <= q0; d1 <= q1; d2 <= q2; d3 <= q3; d4 <= q4;  
          d5 <= q5; d6 <= q6; d7 <= q7;  
        end  
         else  //上面两种情况均未发生时,输入不变  
        begin  
          d0 <= d0; d1 <= d1; d2 <= d2; d3 <= d3; d4 <= d4;  
          d5 <= d5; d6 <= d6; d7 <= d7;  
        end  
      
    endmodule
    
    

    显示模块

    结构图:
    在这里插入图片描述
    code:

    module IP_seg_disp(
        input clk_190hz,
        input [3:0] d0,d1,d2,d3,d4,d5,d6,d7
        output reg [7:0] duan,
        output reg [7:0] wei
        );
    
        reg [3:0] disp;
        reg [2:0] smg_ctl;
        
        always @ ( posedge clk_190hz)
            smg_ctl = smg_ctl + 1'b1;
    	 always @ (*)
            case ( smg_ctl )
            3'b000:begin
                wei = 8'b11111110;
                disp = d0 [3:0];
            end
            3'b001:begin
                wei = 8'b11111101;
                disp = d1 [3:0];
            end
            3'b010:begin
                wei = 8'b11111011;
                disp = d2 [3:0];
            end
            3'b011:begin
                wei = 8'b11110111;
                disp = d3 [3:0];
            end
            3'b100:begin
                wei = 8'b11101111;
                disp = d4 [3:0];
            end
            3'b101:begin
                wei = 8'b11011111;
                disp = d5 [3:0];
             end
            3'b110:begin
                wei = 8'b10111111;
                disp = d6 [3:0];
                if( disp==0 ) //如果高位数值为0,则不显示该位
                   disp <=4'b1111;
                end
            3'b111:begin
                wei = 8'b01111111;
                disp = d7 [3:0];
                if( disp==0 )
                    disp <=4'b1111
            end          
            default:;
            endcase
    
        always @ ( * )
            case (disp)
            4'b0000:duan = 8'b11000000;
            4'b0001:duan = 8'b11111001;
            4'b0010:duan = 8'b10100100;
            4'b0011:duan = 8'b10110000;
            4'b0100:duan = 8'b10011001;
            4'b0101:duan = 8'b10010010;
            4'b0110:duan = 8'b10000010;
            4'b0111:duan = 8'b11111000;
            4'b1000:duan = 8'b10000000;
            4'b1001:duan = 8'b10010000;
            4'b1010:duan = 8'b10001000;
            4'b1011:duan = 8'b10000011;
            4'b1100:duan = 8'b11000110;
            4'b1101:duan = 8'b10100001;
            4'b1110:duan = 8'b10000110;
            4'b1111:duan = 8'b11111111;
            default:duan = 8'b11000000; 
            endcase
    endmodule
    
    

    顶层模块

    code:

    module freDetect(clk_100mhz,rst,duan,wei);  
      input clk_100mhz;  
      input rst; //复位信号  
      output [7:0] duan; 
      output [7:0] wei;  
      wire[3:0] q0, q1, q2, q3, q4, q5, q6, q7;   //中间数据  
      wire[3:0] d0, d1, d2, d3, d4, d5, d6, d7;
      wire fin;
      wire clk_1Hz;
      wire clk_190hz;
    //分频模块实例
      div u_div( 
                 .clk_1Hz(clk_1Hz),
                 .clk_190hz(clk_190hz),
                 .clk_100mhz(clk_100mhz),
                 .fin(fin)
                    ); 
      //显示模块实例             
      IP_seg_disp u_IP_seg_disp( .clk_190hz(clk_190hz), .d0(d0), 
                               .d1(d1),  .d2(d2),  .d3(d3), .d4(d4), 
                               .d5(d5),  .d6(d6),  .d7(d7),
                               .duan(duan), .wei(wei) 
    );
      //控制模块实例  
      control u_control(.clk_1Hz(clk_1Hz), .rst(rst), .count_en(count_en),  
                        .latch_en(latch_en), .clear(clear));  
        
      //计数器模块实例  
      counter_10 counter0(.en_in(count_en), .clear(clear), .rst(rst),  
                          .fin(fin), .en_out(en_out0), .q(q0));  
      counter_10 counter1(.en_in(en_out0), .clear(clear), .rst(rst),  
                          .fin(fin), .en_out(en_out1), .q(q1));  
      counter_10 counter2(.en_in(en_out1), .clear(clear), .rst(rst),  
                          .fin(fin), .en_out(en_out2), .q(q2));  
      counter_10 counter3(.en_in(en_out2), .clear(clear), .rst(rst),  
                          .fin(fin), .en_out(en_out3), .q(q3));  
      counter_10 counter4(.en_in(en_out3), .clear(clear), .rst(rst),  
                          .fin(fin), .en_out(en_out4), .q(q4));  
      counter_10 counter5(.en_in(en_out4), .clear(clear), .rst(rst),  
                          .fin(fin), .en_out(en_out5), .q(q5));  
      counter_10 counter6(.en_in(en_out5), .clear(clear), .rst(rst),  
                          .fin(fin), .en_out(en_out6), .q(q6));  
      counter_10 counter7(.en_in(en_out6), .clear(clear), .rst(rst),  
                          .fin(fin), .en_out(en_out7), .q(q7));  
        
      //锁存器模块实例  
      latch u_latch(.clk_1Hz(clk_1Hz), .rst(rst), .latch_en(latch_en),  
                    .q0(q0), .q1(q1), .q2(q2), .q3(q3), .q4(q4), .q5(q5),  
                    .q6(q6), .q7(q7), .d0(d0), .d1(d1), .d2(d2), .d3(d3),  
                    .d4(d4), .d5(d5), .d6(d6), .d7(d7));  
         
    endmodule
    
    

    测试文件:

    module freDetect_tb;  
      parameter CLK_1HZ_DELAY = 50000000; //用于生成1Hz基准信号  
      parameter FIN_DELAY = 500;     //用于生成100KHz待测信号  
      reg clk_1Hz;  
      reg fin;  
      reg rst;  //复位
      wire[3:0] d0, d1, d2, d3, d4, d5, d6, d7;  
      initial  
        begin  
          rst =1'b0;  
          #1 rst = 1'b1;  
        end 
      initial  
        begin  
          fin = 1'b0;  
          forever  
          #FIN_DELAY fin = ~fin;  
        end 
      initial  
        begin  
          clk_1Hz = 1'b0;  
          forever  
          #CLK_1HZ_DELAY clk_1Hz = ~clk_1Hz;  
        end
        freDetect freDetect1(.clk_1Hz(clk_1Hz), .rst(rst), .fin(fin),  
        .d0(d0), .d1(d1), .d2(d2), .d3(d3), .d4(d4), .d5(d5), .d6(d6), .d7(d7));  
    endmodule
    

    波形仿真结果如图所示:
    在这里插入图片描述
    实验结果:

    两张图片分别为 测量计数时和复位时和显示计数时:
    测量计数时和复位时的显示显示计数时

    我也写了几篇关于Veirlog的文章,感兴趣的同学可以去看看。该模块链接如下:
    https://blog.csdn.net/weixin_43877139/article/category/8778400

    展开全文
  • 随着三网融合[1]的推进,多功能电视机顶盒已经... 系统总体设计框图如图1所示。系统以HL1010芯片为控制核心,数字加速度传感器、数字陀螺仪和地磁计的数据通过I2C总线传至HL1010的8051微控制器,经过滤波和体感算法
  •  图1为中频采样系统总体设计框图。由图1可知,该系统主要由驱动电路、A/D转换电路、时钟电路3部分组成。  1.1 驱动电路  信号A/D转换前往往需要进行以下处理:1)放大或衰减,使输入信号的电平与A/D转换器的...
  •  1 系统总体设计 系统总体设计框图如图1所示。 整个系统由不同的智能模块组成,智能模块由电源电路、SC1128收发电路及外围电路组成。每个智能模块对应一个不同的地址,以免执行不属于本模块的命令。地址可由一个...
  • 总体设计框图   系统电路设计总体设计方框图所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用2位LED数码管以串口传送数据实现温度显示。 主控制器   单片机stc89c52具有低电压供电和体积小等特点,...
  •  1.1 总体设计框图  如图1 所示, 逆变器系统由升压电路、逆变电路、控制电路和反馈电路组成。低压直流电源DC12V经过升压电路升压、整流和滤波后得到约DC170V高压直流电,然后经全桥逆变电路DC/AC转换和LC滤波器...
  • CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品着称的德国BOSCH公司开发了的,并最终成为国际标准(ISO118?... 系统总体设计框图如图l所示。系统分为发射端和接收端两部分。
  • 硬件电路可以分为3个部分:主控电路模块、功率驱动模块和位置检测模块。主控电路模块以DSP为,外围电路主要包括:调试仿真接口电路、外部存储器扩展电路、串行通信接口电路、CAN... 图 数字伺服控制系统总体框图 :
  • 摘 要: 针对数字化UPS,给出了系统总体设计框图,为提高系统控制程序的实时性,提出一种基于实时操作系统μC/OS-II的嵌入式UPS 系统控制方案。通过对UPS控制系统结构与功能的分析,实现了μC/OS-II在TMS320LF2407A上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 550
精华内容 220
关键字:

总体设计框图