久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8224|回復: 11
打印 上一主題 下一主題
收起左側

51單片機簡易信號發生器仿真設計 含誤差分析+源碼+波形圖

  [復制鏈接]
跳轉到指定樓層
樓主
本人的課程設計,和大家分享分享,多謝大家的指導和建議!

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

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


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

二、主要程序部分


主要是根據不同頻率段分不同的最小計數時長
/*******************************************************************************
* 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;//高電平輸出結束 關閉定時器
    }
}




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


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

來自 6#
ID:191542 發表于 2020-5-30 15:22 | 只看該作者
這個系統的使用講解網站   https://b23.tv/Bxez2n
回復

使用道具 舉報

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

晶振是11.0592Mhz的 ,實物運行的誤差補償已經調整好了(仿真的誤差需要自己補償)
回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

7#
ID:745905 發表于 2020-6-4 11:46 | 只看該作者
可以調節頻率嗎
回復

使用道具 舉報

8#
ID:191542 發表于 2020-7-10 16:29 | 只看該作者
尷尬 發表于 2020-6-4 11:46
可以調節頻率嗎

頻率可調,占空比可調,脈寬可調。全部均可通過矩陣按鍵實現
回復

使用道具 舉報

9#
ID:801177 發表于 2020-7-10 18:16 | 只看該作者
可以調節頻率嗎
回復

使用道具 舉報

10#
ID:191542 發表于 2020-7-18 08:42 | 只看該作者
郎中 發表于 2020-7-10 18:16
可以調節頻率嗎

頻率可調,占空比可調,脈寬可調。全部均可通過矩陣按鍵實現
回復

使用道具 舉報

11#
ID:821033 發表于 2020-10-29 23:06 來自手機 | 只看該作者
好文章謝謝分享
回復

使用道具 舉報

12#
ID:88606 發表于 2020-10-31 16:27 | 只看該作者
這個有料!看看能不能在實際中應用到!
回復

使用道具 舉報

13#
ID:859787 發表于 2020-12-23 11:21 來自手機 | 只看該作者
好文章
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人一区二区 | 在线观看精品 | 午夜激情国产 | 狠狠的日| 中文字幕一区二区三区四区五区 | 色综久久| 国产精品夜夜夜一区二区三区尤 | 欧美一区成人 | 中文字幕亚洲区一区二 | 欧美黄色免费网站 | 亚洲精品久 | 亚洲免费在线观看av | 秋霞电影一区二区 | 在线91| 亚洲欧美综合 | 精品一区二区av | 成人免费三级电影 | 日韩一区二区久久 | 中文字幕第十页 | 久久久999成人 | 欧美激情一区二区 | 99精品久久久久久久 | 91精品国产日韩91久久久久久 | 成人av免费 | 人人插人人 | 一区二区国产精品 | av色站| 日韩色图在线观看 | 中文字幕在线网 | 精品亚洲一区二区三区 | 午夜视频网站 | 久久一区二区免费视频 | 久久新视频 | 日韩精品一区二区三区在线播放 | 亚洲精品中文在线 | 日本aa毛片a级毛片免费观看 | 婷婷在线免费 | 国产精品国产 | 99热首页| 男女羞羞免费视频 | 在线观看成人免费视频 |