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

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

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
跳一跳物理助手的實(shí)現(xiàn),代碼更加規(guī)范,視頻請(qǐng)參https://v.youku.com/v_show/id_XN ... 42.soresults.dtitle



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


算法:

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


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

2.算法實(shí)現(xiàn):
paramsInit()中初始化結(jié)構(gòu)體:
Jump_Params.L=0;
    Jump_Params.m=22.26;
    Jump_Params.n=56.44;

main.c中計(jì)算延時(shí)時(shí)間:
Jump_Params.T=Jump_Params.m*Jump_Params.L+Jump_Params.n; //計(jì)算延時(shí)時(shí)間

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


九、運(yùn)行設(shè)計(jì):
1、硬件運(yùn)行設(shè)計(jì)
可選擇普中科技HC6800-EM3開發(fā)板或使用以下材料參照電路原理圖自行搭建。

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

2、軟件運(yùn)行設(shè)計(jì):
使用KEIL C51 (8051內(nèi)核的微控制器開發(fā)工具)進(jìn)行程序設(shè)計(jì),使用STC-isp 下載器進(jìn)行程序燒錄。

軟件結(jié)構(gòu)圖



二、邏輯框圖


三、功能流程圖:


四、軟件總體設(shè)計(jì):



五、軟件接口:

1.毫秒延時(shí)函數(shù)
//--------------------------------------------------------------------------------------------
// @brief 毫秒延時(shí)
// @param 延時(shí)毫秒數(shù)值 類型unsigned int
// @return void                        
// @since v2.0
// Sample usage:       delay_ms(10);//延時(shí)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、數(shù)值拆分函數(shù)
//-------------------------------------------------------------------------------------------------------------------
// @brief 數(shù)值拆分
// @param  待顯示的十進(jìn)制數(shù) 類型uchar
// @return void                        
// @since v2.0
// Sample usage:       DisplayData(90);   
//-------------------------------------------------------------------------------------------------------------------
void DisplayData(uchar c)       //數(shù)值拆分函數(shù)
{
    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
功能:中斷按鍵觸發(fā),清零距離與數(shù)碼管數(shù)值

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

4、繼電器控制模塊:
RelayControl.c
RelayControl.h
功能:實(shí)現(xiàn)觸屏功能
5、延時(shí)模塊:
Delay_ms.c
Delay_ms.h
功能:延時(shí)

6、結(jié)構(gòu)體參數(shù)頭文件
Params.h
功能:參數(shù)設(shè)定

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




七、函數(shù)名稱功能介紹:

1、
//--------------------------------------------------------------------------------------------
// @brief 按鍵掃描
// @param void
// @return void                        
// @since v2.0
// Sample usage:       keyscan();  
//--------------------------------------------------------------------------------------------
void keyscan()              //按鍵掃描函數(shù)
{
    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秒后自動(dòng)釋放按鍵
            {
                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;           //第二次按下取得的值作為個(gè)位
                Jump_Params.num=0;                              //清零計(jì)數(shù)標(biāo)志
            }
        }
    }
}


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


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

3、

//--------------------------------------------------------------------------------------------
// @brief 外部中斷服務(wù)函數(shù)
// @param void
// @return void                        
// @since v2.0
// Sample usage:       內(nèi)部調(diào)用,用戶無需調(diào)用
//--------------------------------------------------------------------------------------------

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

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

void DigDisplay()           //數(shù)碼管顯示函數(shù)
{
        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; //數(shù)碼管消隱
        }
   
}

5、
//-------------------------------------------------------------------------------------------------------------------
// @brief 數(shù)值拆分
// @param  待顯示的十進(jìn)制數(shù) 類型uchar
// @return void                        
// @since v2.0
// Sample usage:       DisplayData(90);   
//-------------------------------------------------------------------------------------------------------------------
void DisplayData(uchar c)       //數(shù)值拆分函數(shù)
{
    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()         //繼電器控制函數(shù)
{
        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 毫秒延時(shí)
// @param 延時(shí)毫秒數(shù)值 類型unsigned int
// @return void                        
// @since v2.0
// Sample usage:       delay_ms(10);//延時(shí)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++);
}

評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区欧美 | 99在线资源| 成人影视网址 | 欧美日韩高清免费 | 精品久久久久久久久久久久久久 | www,黄色,com | 日韩视频中文字幕 | 欧美精品久久久 | 97久久久 | 欧美美女爱爱视频 | 九九免费视频 | 综合色播 | 人人射人人草 | 成人免费视频网站在线观看 | 亚洲欧美中文日韩在线v日本 | 午夜私人影院在线观看 | 欧美aⅴ | 亚洲国产精品第一区二区 | 精品国产乱码久久久久久蜜柚 | 午夜国产一级 | 欧美日韩综合一区 | 久久久久亚洲精品中文字幕 | 性高湖久久久久久久久3小时 | 中国黄色在线视频 | 91精品国产欧美一区二区 | 午夜免费看 | 国产成人精品a视频 | a在线免费观看视频 | 99re超碰| 夜夜骑首页| 老外黄色一级片 | 综合色播| 成人性生交大片免费看中文带字幕 | 日韩一区二区三区av | 人人做人人澡人人爽欧美 | 国产 欧美 日韩 一区 | 国产精品久久久久久久久久久久久 | 成人毛片一区二区三区 | 久久一二 | 精品久久久久久久久久久久久 | 国产日韩一区二区三免费高清 |