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

標題: 微信跳一跳物理助手制作,多文件工程,代碼規范性和可讀性相比上一帖有很大提升 [打印本頁]

作者: 1254333071    時間: 2019-6-1 20:45
標題: 微信跳一跳物理助手制作,多文件工程,代碼規范性和可讀性相比上一帖有很大提升
跳一跳物理助手的實現,代碼更加規范,視頻請參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++);
}






歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 99热99re6国产在线播放 | 国产成人91 | 秋霞av在线 | 人人超碰人人 | 国产免费av在线 | 国产农村妇女aaaaa视频 | 国产免费黄色片 | 色婷婷导航 | 老司机精品福利视频 | 日韩一区二区三区视频 | 999精品视频| 黄色小说视频 | 91亚洲国产成人久久精品网站 | 久久久久一 | 免费的av | 国产不卡在线观看 | 黄色免费片| 国产福利视频在线 | 久久国产精品视频 | 日韩视频在线播放 | 日韩999| 亚洲免费大片 | 精品国产精品三级精品av网址 | 午夜伦理视频 | 日本天堂网 | 欧美第一页 | 久久久97| 日韩高清在线播放 | 2025国产精品 | 亚洲第一伊人 | 又黄又爽又刺激的视频 | 精品成人在线 | 国产一区二区三区在线视频 | 国产乱淫av | 激情做爰呻吟视频舌吻 | 亚洲小视频 | 欧美综合网 | 国产一区二区三区在线视频 | 成人一区二区三区 | 青青草免费在线观看 | 欧美精品国产 |