⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 C
字号:
//-----------------------------------------------------------------
//  名称:射击训练游戏
//-----------------------------------------------------------------
//  说明:程序启动时液晶屏显示游戏封面,然后显示游戏区,默认弹药为20发,
//       K1,K2键用于向上或向下移动枪支,跟踪目标,K3用于发射并模拟枪声,
//       在每次发射时,如果击中则加1分,在击中后如果目标物体尚未移动时,
//       程序不重复加分.弹药用完后可按下K4重新开始. 
//
//-----------------------------------------------------------------
#include <htc.h>
#include <stdio.h>
#include <stdlib.h>
#include "LM4229.h"
#include "PictureDots.h"

//按键定义
#define K1_DOWN() (RB4 == 0)  //上移
#define K2_DOWN() (RB5 == 0)  //下移
#define K3_DOWN() (RB6 == 0)  //发射
#define K4_DOWN() (RB7 == 0)  //重新开始
//蜂鸣器
#define BEEP()   RE2 = ~RE2
INT8U HCount = 0,LCount = 0;         //控制模拟枪声的延时变量
INT8U Score = 0, Bullet_Count = 20;  //得分,剩余弹药数 
INT8U Target_x = 0, Target_y = 0;    //目标物体位置
INT8U Pre_Target_y = 0;              //目标物体上次所在纵坐标位置
INT8U gun_y = 20;                    //枪支纵坐标(其中横坐标固定为16*8)
INT8U i;
//-----------------------------------------------------------------
// 延时nX50ms
//-----------------------------------------------------------------
void DelayX50ms(INT8U x)
{


}

//-----------------------------------------------------------------
// 显示成绩与剩余弹药数
//-----------------------------------------------------------------
void Show_Score_and_Bullet()
{
    char dat_str[4] = {' ',0,0,0};
    //显示成绩



    //显示剩余弹药数


}

//-----------------------------------------------------------------
// 按键处理函数
//-----------------------------------------------------------------
void Key_Handle() 
{
    //枪支位置上移-------------------------------------------------
    if (K1_DOWN())
    {
       if (gun_y != 0) Display_Str_at_xy(26*8,gun_y,(char*)"   ",0);
       gun_y -= 8;
       if (gun_y < 20 ) gun_y = 20;
       Draw_Image(Gun_Image,gun_y,26);
    }
    //枪支位置下移-------------------------------------------------
    else if (K2_DOWN()) 
    {
       if (gun_y != 0) Display_Str_at_xy(26*8,gun_y,(char*)"   ",0);

       gun_y += 8; 
       if (gun_y > 100 ) gun_y = 100;
       Draw_Image(Gun_Image,gun_y,26);
    }
    //发射,绘制与擦除弹道线条,模拟枪声,判断成绩--------------------
    else if (K3_DOWN())
    {
      




    }
    //成绩与弹药数复位---------------------------------------------
    else if (K4_DOWN())
    {       
      




    }
}

//-----------------------------------------------------------------
// TIMER1溢出中断控制模拟枪声输出
//-----------------------------------------------------------------
void TMR1_Gun_Sound()
{


}
   
//-----------------------------------------------------------------
// TIMER0溢出中断控制目标物体随机移动
//-----------------------------------------------------------------
void TMR0_Ctrl_Target_Rand_Mov()
{


}

//-----------------------------------------------------------------
// 中断处理函数
//-----------------------------------------------------------------
void interrupt INT_ISR() 
{
   if (TMR1IF)
   {
       TMR1IF = 0;                       //软件清零TMR1IF中断标志位
       TMR1_Gun_Sound();                 //TMR1控制输出模拟枪声
   }
   if (INT0IF)
   {
       INT0IF = 0;                       //软件清零INT中断标志位
       Key_Handle();                     //延时按键中断
   }
   if (TMR0IF)
   {
       TMR0IF = 0;                       //软件清零TMR0IF中断标志位
       TMR0_Ctrl_Target_Rand_Mov();      //TMR0控制目标物体随机移动
   }
}

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{    
    ADCON1 = 0x06;                //关闭模数转换端口
    TRISD = PORTD = 0x00;         //液晶端口配置
    TRISC = PORTC = 0x00;
    TRISB = 0xFF;                 //按键输入端口
    RBPU = 0;                     //RB端口内部上拉
    TRISE2 = 0;                   //蜂鸣器输出   
    LCD_Initialise();             //液晶初始化
    Clear_Screen();               //清屏
    Draw_Image(Game_Surface,6,0); //显示游戏封面
    DelayX50ms(60);
    Clear_Screen();               //随后清除封面
    //显示固定文字:"★★射击训练游戏★★"
    //(待显示汉字用内码表示,因内码过长,第190行末尾添加了换行符“\”)
    Display_Str_at_xy(55,1,(char*)
    "\xA1\xEF\xA1\xEF\xC9\xE4\xBB\xF7\xD1\xB5\xC1\
    \xB7\xD3\xCE\xCF\xB7\xA1\xEF\xA1\xEF",1);
    //显示固定文字:"得分"
    Display_Str_at_xy(2,117,(char*)"\xB5\xC3\xB7\xD6",0);
    //显示固定文字:"剩余弹药"
    Display_Str_at_xy(75,117,(char*)"\xCA\xA3\xD3\xE0\xB5\xAF\xD2\xA9",0);     
    Show_Score_and_Bullet();      //显示成绩与弹药值
    
    //用四条直线绘制游戏区边框




    Draw_Image(Gun_Image,gun_y,26);  //在初始位置绘制枪支
    //设置TMR0,TMR1,INT0中断




    while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -