|
0.png (32.95 KB, 下載次數(shù): 55)
下載附件
2016-10-7 23:09 上傳
0.png (48.11 KB, 下載次數(shù): 44)
下載附件
2016-10-7 23:11 上傳
仿真工程文件及所有完整程序等資料下載地址:http://www.zg4o1577.cn/bbs/dpj-56304-1.html
單片機(jī)程序:
- //*************************************************************************************************
- //*************************************************************************************************
- //**<程序名>:俄羅斯方塊游戲 **
- //**<版本說明>:此版是第一版,在LCD1608第4版基礎(chǔ)上改進(jìn)而來,目前只可以繪制游戲區(qū)域的邊框。 **
- //**<完成時(shí)間>:2017年8月28日 **
- //**<作者>:LastRitter **
- //*************************************************************************************************
- //*************************************************************************************************
- //*************************************************************************************************
- //* *
- //* ******************************頭文件及宏定義************************** *
- //* *
- //*************************************************************************************************
- #include "includes.h"
- #define TIME1H 0x3C
- #define TIME1L 0xB0 //定時(shí)器1溢出時(shí)間:50ms
- #define SCANPORT P1
- //*************************************************************************************************
- //* *
- //* ******************************全局變量************************************ *
- //* *
- //*************************************************************************************************
- //unsigned char code uca_TEST[]={0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0};
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動(dòng)標(biāo)志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- bit b_KeyShock=0; //鍵盤防抖動(dòng)標(biāo)志位。
- //當(dāng)按鍵中斷產(chǎn)生時(shí),首先判斷此位。
- //0--執(zhí)行鍵盤掃描及鍵碼處理程序;1--不執(zhí)行。
- bit b_KillShock=0; //防抖標(biāo)志清除位:0--不清除;1--清除。
- unsigned char uc_KillCount=0; //抖動(dòng)標(biāo)志清除計(jì)數(shù),使用定時(shí)器1。
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<鍵盤掃描開啟標(biāo)志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- bit b_KeyScan=0; //0--不掃描;
- //1--掃描。
- //*************************************************************************************************
- //* *
- //* ********************************主函數(shù)****************************** *
- //* *
- //*************************************************************************************************
- /*********************** main ************************/
- void main(void)
- {
- vLCDInitialize();
- vShowOneChin(0,0,uca_QING);
- vShowOneChin(2,0,uca_SHU);
- vShowOneChin(4,0,uca_RU);
- vShowOneChin(6,0,uca_MAOHAO);
- vShowGraph(2,60,32,4,uca_Pig);
- vShowFrame();
- SCANPORT=0x0F;
-
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中斷0,用于開啟鍵盤掃描及鍵碼處理標(biāo)志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- IT0=1; // 中斷方式:下降沿。
- EX0=1; // 開啟外部中斷。
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時(shí)器1,用于防抖動(dòng)標(biāo)志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- TH1=TIME1H;
- TL1=TIME1L;
- TR1=1; //開啟定時(shí)器1
- ET1=1; //開定時(shí)器1中斷
- EA=1;
- while(1)
- {
- if(b_KeyScan==1) //如果有按鍵按下,則進(jìn)行按鍵掃描和鍵碼處理。
- {
- b_KeyScan=0;
- vKeyProcess(ucKeyScan());
- }
- }
- }
- //*************************************************************************************************
- //* *
- //* ******************************外部中斷0,用于開啟鍵盤掃描及鍵碼處理****************** *
- //* *
- //*************************************************************************************************
- void vINT0(void) interrupt 0
- {
- if(b_KeyShock==0)
- {
- b_KeyScan=1; //開啟鍵盤掃描標(biāo)志。
- b_KeyShock=1; //設(shè)置防抖動(dòng)標(biāo)志。
- }
- else b_KeyShock=0; //如果有抖動(dòng)則不執(zhí)行鍵掃描,恢復(fù)防抖動(dòng)標(biāo)志。
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<設(shè)置防抖動(dòng)清除標(biāo)志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- if(b_KeyShock==1)
- b_KillShock=1; //如果防抖動(dòng)標(biāo)志位開啟則開啟防抖動(dòng)標(biāo)志清除位,
- //300ms后清除防抖動(dòng)標(biāo)志。
- }
- //*************************************************************************************************
- //* *
- //* ****************定時(shí)器1中斷,用于計(jì)時(shí)功能和防抖動(dòng)標(biāo)志清除*************************** *
- //* *
- //*************************************************************************************************
- void vTimer1(void) interrupt 3
- {
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動(dòng)標(biāo)志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- if(b_KillShock==1)
- {
- if(uc_KillCount==5) //當(dāng)防抖動(dòng)標(biāo)志位為1時(shí),計(jì)時(shí)300ms后清除抖動(dòng)標(biāo)志位。
- {
- b_KeyShock=0;
- b_KillShock=0;
- uc_KillCount=0;
- }
- else uc_KillCount++;
- }
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢復(fù)定時(shí)器1溢出時(shí)間>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- TH1=TIME1H;
- TL1=TIME1L;
- }
復(fù)制代碼
|
|