找回密码
 注册
关于网站域名变更的通知
查看: 1806|回复: 7
打印 上一主题 下一主题

51单片机简易信号发生器仿真设计 含误差分析+源码+波形图

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-22 13:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机简易信号发生器仿真设计 含误差分析+源码+波形图) I0 p3 \7 H. O" t7 V2 [1 |/ q, E& T3 q
" f4 p8 R9 {7 O4 `" `+ F! \
( C, {0 m& g- m0 V, n3 ]0 `0 j* p
课程设计!
* f6 p2 U# S1 Z$ o3 b) a  h) r7 }9 }7 K$ z) |- Y3 g6 B+ X1 d
后面的附件有完整的工程文件、实习报告、仿真文件和部分误差分析(完整的交给老师了,所有要求均满足,误差很小)
$ m* r0 P8 D$ K9 g3 C% C5 o0 i+ }
一、课程设计内容及基本要求利用单片机IO口作输出,通过定时器的周期性中断输出一个占空比可调、频率可调的简易方波信号发生器,具体要求如下:0 ~' y, }1 ?# v- ^
1、完成频率范围为0.1Hz5KHz的方波发生器,要求如下:
9 ]2 O; Q/ U9 {3 P/ K. B* P+ q
1)占空比5%~95%连续可调;; o+ F6 ?6 e8 }) w
2)可键盘输入信号发生的频率。9 l) ]- S* \( b: q5 t- K
2、可完成脉宽范围为100μs1s的脉冲信号发生器,要求如下:0 f# o3 V! F/ h) o
1)可键盘输入发生脉冲宽度;
9 l( N2 |/ \- X( H6 V
2)每按一次触发键,可发出一个单脉冲。
! ^; K  r/ e. v8 U2 I' a5 Q& ~
3、根据已经描述的C语言控制程序,运用Proteus画出硬件连接图,并将运用C语言描述的程序下载到Proteus虚拟单片机中,在Proteus中实现简易方波信号发生器的各项功能。  
4 _% L& E/ c2 a& c  L- G2 a9 D$ _( @- \0 z/ ~
目录
4 c/ Q, T3 x: S& H7 u( `) H一、Proteus仿真6 c7 C+ e, @/ E* B: y: r; h
1、仿真电路图6 g1 R& i. a- Y3 {& ?9 s
2、0.1HZ波形
; _+ K0 b* ]) X* b: `% w9 H) {- d3、5KHZ波形
* z) G9 U) n0 f" t& `' H: f( u4、10%占空比波形(10HZ): R' d# E6 h  F& y. M+ B& f7 Q
5、90%占空比波形(10HZ)
# k. t! k$ w1 }0 t  K6、工程文件框架
* F# G8 |& J2 S  l二、主程序部分
/ e" U0 E' y$ ?' J/ `1 p: w1、主函数
, v% Y8 v4 e, I6 G0 a! C& k: \2、定时器初始化函数及中断服务函数' W1 \- r4 }8 v* {8 X
三、顶层驱动文件& h3 Z7 u7 ]5 Z  w
1、顶层驱动 .C 文件) I+ {# b" ~4 Y, b* _; v2 {7 U
2、顶层驱动 .H 文件
, g$ p# |5 G$ S5 F( B四、底层驱动文件; Y/ F5 g$ d5 h/ D; I! j3 e) P
1、矩阵按键/ V$ @; \- E9 e" @6 {" B" a( H
1.1 矩阵按键 .C 文件
: S" V: s& M$ P" ]3 e  B1.2 矩阵按键 .H 文件
7 w; i3 X) B) s# L  f2、四段数码管& L1 j/ y9 W% z
2.1 四段数码管.C 文件  E* U- v* Y" v/ z- V! ]7 J
2.2 四段数码管.H 文件
" ~) v- v8 A; a: f3 f- c/ m# r

7 D4 u# C' D1 B5 T/ k一、      Proteus仿真1、仿真电路图
2、0.1HZ波形
3、5KHZ波形
4、10%占空比波形(10HZ)
5、90%占空比波形(10HZ)
6、工程文件框架

$ X, b+ m( a5 ]0 R) m$ D
二、主要程序部分6 ^- b6 W- J: P5 G0 M7 U: E. ^

+ q5 \. [& @$ y主要是根据不同频率段分不同的最小计数时长
  Q3 S7 B/ y, I, Z
/*******************************************************************************
* FunctionName  : Function_1_Serve
* Description    : 模式1服务函数 定时器0单位定时周期配置
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Function_1_Serve(void)
{
        float temp = 0.0;
        temp = Calculate_Data();//计算方波频率
        /*对应不同频率段 设置不同的单位定时器周期*/
        if(temp<=1)
                TIMEO = 10000;
        else if(temp<=10)
                TIMEO = 1000;
        else if(temp<=100)
                TIMEO = 100;
        else if(temp<=1000)
                TIMEO = 50;
        else if(temp<=10000)
                TIMEO = 20;
        switch(TIMEO)// 设置不同的单位定时器周期
        {        
                /*0.1hz-1hz*/
                case 10000:
                        TIMEO_H = 0xdc;TIMEO_L = 0x00;
                        time0_all_num=100/temp;time0_high_num=time0_low_num=time0_all_num/2;break;
                /*1hz-10hz*/
                case 1000:        
                        TIMEO_H = 0xfc;TIMEO_L = 0x75;
                        time0_all_num=1000/temp;time0_high_num=time0_low_num=time0_all_num/2;break;
               /*10hz-100hz*/
                case 100:        
                        TIMEO_H = 0xff;TIMEO_L = 0xb2;
                        time0_all_num=10000/temp;time0_high_num=time0_low_num=time0_all_num/2;break;
                /*100hz-1000hz*/
                case 50:        
                        TIMEO_H = 0xff;TIMEO_L = 0xdf;
                        time0_all_num=20000/temp;time0_high_num=time0_low_num=time0_all_num/2;break;
                /*1000hz-10khz*/
                case 20:        
                        TIMEO_H = 0xff;TIMEO_L = 0xff;
                        time0_all_num=23000/temp;time0_high_num=time0_low_num=time0_all_num/2;break;
                default:break;
        }
}
/*******************************************************************************
* FunctionName  : Function_3_Serve
* Description    : 模式3服务函数  定时器1单位定时周期配置
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Function_3_Serve(void)
{
    float temp = 0.0;
    temp = Calculate_Data();
   
    time1_all_num = (uint)temp;
    TIME1_H = ((65536-80)/256);
    TIME1_L = ((65536-80)%256);
}
/*******************************************************************************
* FunctionName  : Time_Init
* Description    :系统定时器初始化
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
voidTime_Init(void)
{
    TMOD = 0X11;   
    TR0 = 0;            
    TR1 = 0;
    ET0 = 1;   
    ET1 = 1;
    EA = 1;
}
/*******************************************************************************
* FunctionName  : Time0(void) interrupt 1
* Description    :定时器0中断服务函数
* Input          : None
* Output         : None
*******************************************************************************/
void Time0(void)interrupt 1
{   
    TH0 = TIMEO_H;
    TL0 = TIMEO_L;
    time0_num++;        //记录一个周期进入定时器中断的次数
    if(time0_num > time0_high_num)  //输出口由高电平跳变为低电平
        OUTPUT=0;   
    if(time0_num > time0_all_num)   //输出口由低电平跳变为高电平
    {
        OUTPUT=1;
        time0_num = 0;
    }
}
/*******************************************************************************
* FunctionName  : Time1(void) interrupt 3
* Description    : 定时器1中断服务函数
* Input          : None
* Output         : None
*******************************************************************************/
void Time1(void)interrupt 3
{
    TH1 = TIME1_H;
    TL1 = TIME1_L;  
    time1_num++;        //记录进入定时器中断的次数
    if(time1_all_num>time1_num) //输出口由高电平跳变为低电平
        OUTPUT = 1;
    if(time1_all_num<time1_num) //输出口由低电平跳变为高电平
    {
        OUTPUT = 0;
        time1_num = 0;
        TR1 = 0;//高电平输出结束 关闭定时器
    }
}

5 }4 r, C. \; k7 H
下载:
游客,如果您要查看本帖隐藏内容请回复
7 u- n6 y2 A* M/ h

该用户从未签到

2#
发表于 2019-1-22 18:22 | 只看该作者
不错,谢谢楼主分享

该用户从未签到

3#
发表于 2019-12-16 18:56 | 只看该作者
谢谢楼主分享
) {; _; P6 q- b- u2 }* [

该用户从未签到

4#
发表于 2019-12-17 17:44 | 只看该作者
谢谢楼主分享

该用户从未签到

5#
发表于 2019-12-17 17:51 | 只看该作者
谢谢楼主分享

该用户从未签到

7#
发表于 2020-12-20 00:21 | 只看该作者
干货收藏一波: y5 ~' E" |( l# g: v( H% ?

该用户从未签到

8#
发表于 2021-1-14 20:32 | 只看该作者
好资料,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-18 06:36 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表