找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8232|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)簡(jiǎn)易信號(hào)發(fā)生器仿真設(shè)計(jì) 含誤差分析+源碼+波形圖

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本人的課程設(shè)計(jì),和大家分享分享,多謝大家的指導(dǎo)和建議!

后面的附件有完整的工程文件、實(shí)習(xí)報(bào)告、仿真文件和部分誤差分析(完整的交給老師了,所有要求均滿足,誤差很。
一、課程設(shè)計(jì)內(nèi)容及基本要求利用單片機(jī)IO口作輸出,通過(guò)定時(shí)器的周期性中斷輸出一個(gè)占空比可調(diào)、頻率可調(diào)的簡(jiǎn)易方波信號(hào)發(fā)生器,具體要求如下:
1、完成頻率范圍為0.1Hz5KHz的方波發(fā)生器,要求如下:
1)占空比5%~95%連續(xù)可調(diào);
2)可鍵盤輸入信號(hào)發(fā)生的頻率。
2、可完成脈寬范圍為100μs1s的脈沖信號(hào)發(fā)生器,要求如下:
1)可鍵盤輸入發(fā)生脈沖寬度;
2)每按一次觸發(fā)鍵,可發(fā)出一個(gè)單脈沖。
3、根據(jù)已經(jīng)描述的C語(yǔ)言控制程序,運(yùn)用Proteus畫出硬件連接圖,并將運(yùn)用C語(yǔ)言描述的程序下載到Proteus虛擬單片機(jī)中,在Proteus中實(shí)現(xiàn)簡(jiǎn)易方波信號(hào)發(fā)生器的各項(xiàng)功能。  

目錄
一、Proteus仿真
1、仿真電路圖
2、0.1HZ波形
3、5KHZ波形
4、10%占空比波形(10HZ)
5、90%占空比波形(10HZ)
6、工程文件框架
二、主程序部分
1、主函數(shù)
2、定時(shí)器初始化函數(shù)及中斷服務(wù)函數(shù)
三、頂層驅(qū)動(dòng)文件
1、頂層驅(qū)動(dòng) .C 文件
2、頂層驅(qū)動(dòng) .H 文件
四、底層驅(qū)動(dòng)文件
1、矩陣按鍵
1.1 矩陣按鍵 .C 文件
1.2 矩陣按鍵 .H 文件
2、四段數(shù)碼管
2.1 四段數(shù)碼管.C 文件
2.2 四段數(shù)碼管.H 文件


一、      Proteus仿真1、仿真電路圖
2、0.1HZ波形
3、5KHZ波形
4、10%占空比波形(10HZ)
5、90%占空比波形(10HZ)
6、工程文件框架

二、主要程序部分


主要是根據(jù)不同頻率段分不同的最小計(jì)數(shù)時(shí)長(zhǎng)
/*******************************************************************************
* FunctionName  : Function_1_Serve
* Description    : 模式1服務(wù)函數(shù) 定時(shí)器0單位定時(shí)周期配置
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Function_1_Serve(void)
{
        float temp = 0.0;
        temp = Calculate_Data();//計(jì)算方波頻率
        /*對(duì)應(yīng)不同頻率段 設(shè)置不同的單位定時(shí)器周期*/
        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)// 設(shè)置不同的單位定時(shí)器周期
        {        
                /*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服務(wù)函數(shù)  定時(shí)器1單位定時(shí)周期配置
* 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    :系統(tǒng)定時(shí)器初始化
* 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    :定時(shí)器0中斷服務(wù)函數(shù)
* Input          : None
* Output         : None
*******************************************************************************/
void Time0(void)interrupt 1
{   
    TH0 = TIMEO_H;
    TL0 = TIMEO_L;
    time0_num++;        //記錄一個(gè)周期進(jìn)入定時(shí)器中斷的次數(shù)
    if(time0_num > time0_high_num)  //輸出口由高電平跳變?yōu)榈碗娖?/font>
        OUTPUT=0;   
    if(time0_num > time0_all_num)   //輸出口由低電平跳變?yōu)楦唠娖?/font>
    {
        OUTPUT=1;
        time0_num = 0;
    }
}
/*******************************************************************************
* FunctionName  : Time1(void) interrupt 3
* Description    : 定時(shí)器1中斷服務(wù)函數(shù)
* Input          : None
* Output         : None
*******************************************************************************/
void Time1(void)interrupt 3
{
    TH1 = TIME1_H;
    TL1 = TIME1_L;  
    time1_num++;        //記錄進(jìn)入定時(shí)器中斷的次數(shù)
    if(time1_all_num>time1_num) //輸出口由高電平跳變?yōu)榈碗娖?/font>
        OUTPUT = 1;
    if(time1_all_num<time1_num) //輸出口由低電平跳變?yōu)楦唠娖?/font>
    {
        OUTPUT = 0;
        time1_num = 0;
        TR1 = 0;//高電平輸出結(jié)束 關(guān)閉定時(shí)器
    }
}




全部資料51hei下載地址:
單片機(jī)課程設(shè)計(jì).rar (2.1 MB, 下載次數(shù): 169)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

來(lái)自 6#
ID:191542 發(fā)表于 2020-5-30 15:22 | 只看該作者
這個(gè)系統(tǒng)的使用講解網(wǎng)站   https://b23.tv/Bxez2n
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:191542 發(fā)表于 2019-1-10 14:57 | 只看該作者
本帖最后由 總是離人淚 于 2019-1-11 21:48 編輯

晶振是11.0592Mhz的 ,實(shí)物運(yùn)行的誤差補(bǔ)償已經(jīng)調(diào)整好了(仿真的誤差需要自己補(bǔ)償)
回復(fù)

使用道具 舉報(bào)

板凳
ID:191542 發(fā)表于 2019-3-16 15:26 | 只看該作者
在reg52.h頭文件中添加這兩句代碼#define uint unsigned int
#define uchar unsigned char
回復(fù)

使用道具 舉報(bào)

地板
ID:284667 發(fā)表于 2019-3-30 11:59
為什么不能用呢

5#
ID:191542 發(fā)表于 2019-5-6 22:29 | 只看該作者
您好,您遇到什么問(wèn)題了?可以找我的,我給您解決。
回復(fù)

使用道具 舉報(bào)

7#
ID:745905 發(fā)表于 2020-6-4 11:46 | 只看該作者
可以調(diào)節(jié)頻率嗎
回復(fù)

使用道具 舉報(bào)

8#
ID:191542 發(fā)表于 2020-7-10 16:29 | 只看該作者
尷尬 發(fā)表于 2020-6-4 11:46
可以調(diào)節(jié)頻率嗎

頻率可調(diào),占空比可調(diào),脈寬可調(diào)。全部均可通過(guò)矩陣按鍵實(shí)現(xiàn)
回復(fù)

使用道具 舉報(bào)

9#
ID:801177 發(fā)表于 2020-7-10 18:16 | 只看該作者
可以調(diào)節(jié)頻率嗎
回復(fù)

使用道具 舉報(bào)

10#
ID:191542 發(fā)表于 2020-7-18 08:42 | 只看該作者
郎中 發(fā)表于 2020-7-10 18:16
可以調(diào)節(jié)頻率嗎

頻率可調(diào),占空比可調(diào),脈寬可調(diào)。全部均可通過(guò)矩陣按鍵實(shí)現(xiàn)
回復(fù)

使用道具 舉報(bào)

11#
ID:821033 發(fā)表于 2020-10-29 23:06 來(lái)自手機(jī) | 只看該作者
好文章謝謝分享
回復(fù)

使用道具 舉報(bào)

12#
ID:88606 發(fā)表于 2020-10-31 16:27 | 只看該作者
這個(gè)有料!看看能不能在實(shí)際中應(yīng)用到!
回復(fù)

使用道具 舉報(bào)

13#
ID:859787 發(fā)表于 2020-12-23 11:21 來(lái)自手機(jī) | 只看該作者
好文章
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表