完整的源碼和制作資料下載:http://www.torrancerestoration.com/bbs/dpj-20623-1.html
/****************工程包含的頭文件*************************/
#include<stc12c5a.h>
#include<intrins.h>
#include"define.h"
#include"delay.h"
#include"zm.h"
#include"32x12matrix.h"
#include"menu.h"
#include"MySnake.h"
#include"ds1302.h"
#include"ds18b20.h"
#include"i2c.h"
#include"radio.h"
#include"ir.h"
/*---------------------------------------------------------
函數(shù)功能:Timer0初始化
調(diào)用形式:Timer0_Init();
參數(shù):無(wú)
備注:用于產(chǎn)生具有隨機(jī)性質(zhì)的貪食蛇游戲食物的坐標(biāo)位置
---------------------------------------------------------*/
void Timer0_Init()
{
TMOD|=0x02;//重裝初值計(jì)數(shù)模式,TL0:0->255
IE|=0X82;
TH0=0;
TL0=0;
TR0=1;//開(kāi)啟內(nèi)部Timer0
}
/*---------------------------------------------------------
函數(shù)功能:ExtInt1初始化
調(diào)用形式:ExtInt1_Init();
參數(shù):無(wú)
返回值:無(wú)
備注:下降沿
---------------------------------------------------------*/
void ExtInt1_Init(void)
{
IT1=1;
EA=1;
EX1=1;
}
/*---------------------------------------------------------
函數(shù)功能:主函數(shù)
調(diào)用形式:無(wú)
參數(shù):無(wú)
返回值:無(wú)
修改時(shí)間:13.4.17
備注:無(wú)
---------------------------------------------------------*/
void main()
{
uint8 i;
Radio_Init();//待機(jī)
Timer0_Init();
Matrix_Boot();
Timer1_Init();
ExtInt0_Init();
ExtInt1_Init();
Menu_Init(); //菜單初始化
DS1302_Init();
DS18b20_Init();
snake_status=0;
while(1)
{
if(matrix.S==FIRST) //工作在首屏顯示
{
ClearBuf();
if(matrix.N==SNAKE) //菜單編號(hào)等于snake游戲,顯示snake游戲logo
Display_32x16(1);
else
if(matrix.N==JINIANRI)
Display_32x16(2);
else
if(matrix.N==TIME)
Display_32x16(3);//時(shí)鐘LOGO
else if(matrix.N==SET)
{
Display_32x16(4);
}
else if(matrix.N==TEMPERATURE)
{
Display_32x16(5);
for(i=0;i<60;i++)
Display();
Display_32x16(6);
for(i=0;i<64;i++)
temp1[i]=temp[i];
Display_32x16(5);
UpDown_Move(UP,SET_NEXT_SPEED);
for(i=0;i<60;i++)
Display();
Display_32x16(5);
for(i=0;i<64;i++)
temp1[i]=temp[i];
Display_32x16(6);
UpDown_Move(DOWN,SET_NEXT_SPEED);
for(i=0;i<60;i++)
Display();
}
else if(matrix.N==RADIO)
Display_32x16(7);
Display();
}
else //進(jìn)入了程序執(zhí)行狀態(tài)
{
if(matrix.N==SNAKE) //執(zhí)行貪食蛇游戲
{
//if(snake_status==0) //游戲狀態(tài)為0,表示一次執(zhí)行或者游戲結(jié)束 需初始化
//Snake_Init(); //游戲初始化
// else
Snake_Ing(); //游戲進(jìn)行時(shí)
}
else if(matrix.N==JINIANRI)
Display_LeftMove(img_16x16III,25);
else if(matrix.N==TIME)
Time_Ing();
else if(matrix.N==SET)
TimeSet_Ing();
else if(matrix.N==TEMPERATURE)
Temperature_Ing();
else if(matrix.N==RADIO)
Radio_Ing();
}
}
}
/*---------------------------------------------------------
函數(shù)功能:Timer0中斷服務(wù)
調(diào)用形式:
參數(shù):
返回值:
修改時(shí)間:13.4.16
備注:
---------------------------------------------------------*/
void Timer0_IRQ() interrupt 1
{
seed++;
}
/*---------------------------------------------------------
函數(shù)功能:外中斷1服務(wù)函數(shù)
調(diào)用形式:無(wú)
參數(shù):無(wú)
返回值:
修改時(shí)間:13.4.17
備注:根據(jù)點(diǎn)陣的工作狀態(tài)進(jìn)行掃描,便于按鍵復(fù)用
---------------------------------------------------------*/
void ExtInt1_IRQ() interrupt 2
{
if(matrix.S==FIRST)
Menu_Key();//點(diǎn)陣狀態(tài)工作在首屏,執(zhí)行首屏按鍵掃描
else //執(zhí)行程序時(shí)的按鍵掃描
{
if(matrix.N==SNAKE)
Snake_Key(); //貪吃蛇游戲的按鍵掃描
else if(matrix.N==JINIANRI)
LeftMove_Key();
else if(matrix.N==TIME)
Time_Key();
else if(matrix.N==SET)
Time_Set_Key();
else if(matrix.N==TEMPERATURE)
Temperature_Key();
else if(matrix.N==RADIO)
Radio_Key();
}
}