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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

微信跳一跳物理助手制作,多文件工程,代碼規范性和可讀性相比上一帖有很大提升

[復制鏈接]
跳轉到指定樓層
樓主
跳一跳物理助手的實現,代碼更加規范,視頻請參https://v.youku.com/v_show/id_XN ... 42.soresults.dtitle



全部資料51hei下載地址:
微信跳一跳物理助手(不含視頻).zip (664.37 KB, 下載次數: 11)


算法:

1.數據分析:首先通過給定的延時時間,測出小棋子跳的距離,記錄十組左右升序排列,建表,畫出折線圖,如下圖右側:


得出的線性回歸方程為:
T = 22.26 * L + 56.44 (T是延時時間,L是棋子跳的距離)
若要得到更準確的方程,可再多測量幾次數據,再求方程。
(折線的原因是游戲本身是3D的,所以每次用尺子測量的距離誤差較大)

2.算法實現:
paramsInit()中初始化結構體:
Jump_Params.L=0;
    Jump_Params.m=22.26;
    Jump_Params.n=56.44;

main.c中計算延時時間:
Jump_Params.T=Jump_Params.m*Jump_Params.L+Jump_Params.n; //計算延時時間

Rela()中實現觸屏延時:
                RELAY=0;
                delay_ms(Jump_Params.T); //延時時間T,已由距離——時間函數算出
                RELAY=1;
                while(!K1);                 //等待按鍵釋放


九、運行設計:
1、硬件運行設計
可選擇普中科技HC6800-EM3開發板或使用以下材料參照電路原理圖自行搭建。

單片機STC89C52RC、74HC138、74HC573、5V繼電器模塊、四腳輕觸開關、四位數碼管、晶振、電容、電阻、LED燈、銅箔膠帶等,

2、軟件運行設計:
使用KEIL C51 (8051內核的微控制器開發工具)進行程序設計,使用STC-isp 下載器進行程序燒錄。

軟件結構圖



二、邏輯框圖


三、功能流程圖:


四、軟件總體設計:



五、軟件接口:

1.毫秒延時函數
//--------------------------------------------------------------------------------------------
// @brief 毫秒延時
// @param 延時毫秒數值 類型unsigned int
// @return void                        
// @since v2.0
// Sample usage:       delay_ms(10);//延時10ms   
//--------------------------------------------------------------------------------------------
void delay_ms(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}

2、數值拆分函數
//-------------------------------------------------------------------------------------------------------------------
// @brief 數值拆分
// @param  待顯示的十進制數 類型uchar
// @return void                        
// @since v2.0
// Sample usage:       DisplayData(90);   
//-------------------------------------------------------------------------------------------------------------------
void DisplayData(uchar c)       //數值拆分函數
{
    dig[0]=smgduan[c/1000];
    dig[1]=smgduan[(c-(c/1000)*1000)/100];
    dig[2]=smgduan[(c%100)/10];
    dig[3]=smgduan[c%10];
}




六、模塊名稱功能:

以下為模塊化編程中各模塊名稱及功能的介紹
1、按鍵模塊
key.c
key.h
功能:按鍵輸入

2、外部中斷模塊
EXIT.c
EXIT.h
功能:中斷按鍵觸發,清零距離與數碼管數值

3、顯示模塊:
Display.c
Display.h
功能:數碼管顯示

4、繼電器控制模塊:
RelayControl.c
RelayControl.h
功能:實現觸屏功能
5、延時模塊:
Delay_ms.c
Delay_ms.h
功能:延時

6、結構體參數頭文件
Params.h
功能:參數設定

7、工程整合頭文件
common.h
功能:包含工程中的所有頭文件




七、函數名稱功能介紹:

1、
//--------------------------------------------------------------------------------------------
// @brief 按鍵掃描
// @param void
// @return void                        
// @since v2.0
// Sample usage:       keyscan();  
//--------------------------------------------------------------------------------------------
void keyscan()              //按鍵掃描函數
{
    uint a=0;
    uchar KeyValue;
    GPIO_SEG1=0x0f;
    if(GPIO_SEG1!=0x0f)
    {
        delay_ms(10);
        if(GPIO_SEG1!=0x0f)
        {   
            GPIO_SEG1=0x0f;
            switch(GPIO_SEG1)
            {
                case(0x07):
                KeyValue=0;break;
                case(0x0b):
                KeyValue=1;break;
                case(0x0d):
                KeyValue=2;break;
                case(0x0e):
                KeyValue=3;break;
            }
                GPIO_SEG1=0xf0;
            switch(GPIO_SEG1)
            {
                case(0x70):
                KeyValue=KeyValue;break;
                case(0xb0):
                KeyValue=KeyValue+4;break;
                case(0xd0):
                KeyValue=KeyValue+8;break;
                case(0xe0):
                KeyValue=KeyValue+12;break;
            }
            while(a<500&&(GPIO_SEG1!=0xf0))         //0.5秒后自動釋放按鍵
            {
                delay_ms(1);
                a++;
            }
            Jump_Params.num++;
            if(Jump_Params.num==1)
            {
                Jump_Params.L=KeyValue*10.0;            //第一次按下取得的值作十位
            }
            if(Jump_Params.num==2)
            {
                Jump_Params.L=Jump_Params.L+KeyValue*1.0;           //第二次按下取得的值作為個位
                Jump_Params.num=0;                              //清零計數標志
            }
        }
    }
}


2、
//--------------------------------------------------------------------------------------------
// @brief 外部中斷初始化
// @param void
// @return void                        
// @since v2.0
// Sample usage:       Init0();   
//--------------------------------------------------------------------------------------------


void Init0()    //外部中斷配置函數
{
    EA=1;
    EX0=1;
    IT0=0;
}

3、

//--------------------------------------------------------------------------------------------
// @brief 外部中斷服務函數
// @param void
// @return void                        
// @since v2.0
// Sample usage:       內部調用,用戶無需調用
//--------------------------------------------------------------------------------------------

void Int0() interrupt 0         //中斷按鍵觸發,清零距離L與數碼管數值num
{
    delay_ms(10);
    if(Kt==0)
    {
        Jump_Params.L=0;
        Jump_Params.num=0;
    }   
}

4、
//-------------------------------------------------------------------------------------------------------------------
// @brief 數碼管顯示
// @param void
// @return void                        
// @since v2.0
// Sample usage:       DigDisplay();   
//-------------------------------------------------------------------------------------------------------------------

void DigDisplay()           //數碼管顯示函數
{
        uchar i;
        for(i=0;i<4;i++)
        {
            switch(i)
            {
                case 0:
                LsC=0;LsB=0;LsA=0;break;
                case 1:
                LsC=0;LsB=0;LsA=1;break;
                case 2:
                LsC=0;LsB=1;LsA=0;break;
                case 3:
                LsC=0;LsB=1;LsA=1;break;
            
            }
            P1=dig[ i];
            delay_ms(1);
            P1=0x00; //數碼管消隱
        }
   
}

5、
//-------------------------------------------------------------------------------------------------------------------
// @brief 數值拆分
// @param  待顯示的十進制數 類型uchar
// @return void                        
// @since v2.0
// Sample usage:       DisplayData(90);   
//-------------------------------------------------------------------------------------------------------------------
void DisplayData(uchar c)       //數值拆分函數
{
    dig[0]=smgduan[c/1000];
    dig[1]=smgduan[(c-(c/1000)*1000)/100];
    dig[2]=smgduan[(c%100)/10];
    dig[3]=smgduan[c%10];
}

6、
//-------------------------------------------------------------------------------------------------------------------
// @brief 繼電器模擬觸屏控制
// @param void
// @return void                        
// @since v2.0
// Sample usage:       Rela();
//-------------------------------------------------------------------------------------------------------------------
void Rela()         //繼電器控制函數
{
        if(K1==0)
        {
            delay_ms(10);
            if(K1==0)
            {
                RELAY=0;
                delay_ms(Jump_Params.T);
                RELAY=1;
                while(!K1);
                Jump_Params.num=0;
                Jump_Params.L=0;
            }
        }
        else
        {
            RELAY=1;
        }   
}

7、
//-------------------------------------------------------------------------------------------------------------------
// @brief 毫秒延時
// @param 延時毫秒數值 類型unsigned int
// @return void                        
// @since v2.0
// Sample usage:       delay_ms(10);//延時10ms   
//-------------------------------------------------------------------------------------------------------------------
void delay_ms(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区二区在线视频 | av激情在线 | 午夜国产在线 | 九色.com| 日韩在线视频一区 | av黄色在线 | 看av片网站 | 国产一级在线 | 国产精品日韩 | 超碰97免费在线 | 国产精品爱久久久久久久 | 久久久99国产精品免费 | 成人欧美一区二区三区1314 | 亚洲激情在线视频 | 日韩在线免费视频 | 天天舔天天| 亚洲美女网站 | 久久久久久成人 | 91精品一区二区三区久久久久久 | 亚洲啊v | 超碰成人av| 欧美一卡二卡在线观看 | 欧美一级特黄aaa大片在线观看 | 日韩精品激情 | 九九热在线精品视频 | 中文字幕av在线 | 国产精品久久久久久久久久三级 | 亚洲精品成人 | 鲁大师一区影视 | 97超碰在线播放 | 一本大道久久a久久精二百 国产成人免费在线 | 黄篇网址| 欧美精品中文字幕久久二区 | 免费观看毛片 | 日韩久久久久久 | 男人的天堂在线视频 | 人人九九精| 天天草夜夜骑 | 日韩在线成人 | 国产精品特级毛片一区二区三区 | 不卡一区 |