找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3978|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机俄罗斯方块游戏 12864大液晶屏proteus仿真及源程序

[复制链接]
跳转到指定楼层
楼主


仿真工程文件及所有完整程序等资料下载地址:http://www.51hei.com/bbs/dpj-56304-1.html


单片机程序:
  1. //*************************************************************************************************
  2. //*************************************************************************************************
  3. //**<程序名>:俄罗斯方块游戏                                                                                                                                          **
  4. //**<版本说明>:此版是第一版,在LCD1608第4版基础上改进而来,目前只可以绘制游戏区域的边框。                 **
  5. //**<完成时间>:2017年8月28日                                                                                                                                         **
  6. //**<作者>:LastRitter                                                                                                                                                         **
  7. //*************************************************************************************************
  8. //*************************************************************************************************

  9. //*************************************************************************************************
  10. //*                                                                                                                                                                                                  *
  11. //*                         ******************************头文件及宏定义**************************                                  *
  12. //*                                                                                                                                                                                                  *
  13. //*************************************************************************************************
  14. #include "includes.h"


  15. #define TIME1H 0x3C
  16. #define TIME1L 0xB0                //定时器1溢出时间:50ms

  17. #define SCANPORT P1


  18. //*************************************************************************************************
  19. //*                                                                                                                                                                                                  *
  20. //*                         ******************************全局变量************************************                          *
  21. //*                                                                                                                                                                                                  *
  22. //*************************************************************************************************

  23. //unsigned char code uca_TEST[]={0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0};
  24. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  25. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  26. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  27. bit b_KeyShock=0;                                          //键盘防抖动标志位。
  28.                                                                         //当按键中断产生时,首先判断此位。
  29.                                                                         //0--执行键盘扫描及键码处理程序;1--不执行。

  30. bit b_KillShock=0;                                        //防抖标志清除位:0--不清除;1--清除。

  31. unsigned char uc_KillCount=0;                //抖动标志清除计数,使用定时器1。


  32. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  33. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<键盘扫描开启标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  34. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  35. bit b_KeyScan=0;                                        //0--不扫描;
  36.                                                                         //1--扫描。


  37. //*************************************************************************************************
  38. //*                                                                                                                                                                                                  *
  39. //*                          ********************************主函数******************************                                  *
  40. //*                                                                                                                                                                                                  *
  41. //*************************************************************************************************


  42. /*********************** main ************************/
  43. void main(void)
  44. {

  45.         vLCDInitialize();

  46.         vShowOneChin(0,0,uca_QING);
  47.         vShowOneChin(2,0,uca_SHU);
  48.         vShowOneChin(4,0,uca_RU);
  49.         vShowOneChin(6,0,uca_MAOHAO);

  50.         vShowGraph(2,60,32,4,uca_Pig);
  51.         vShowFrame();

  52.         SCANPORT=0x0F;
  53.         
  54. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  55.         IT0=1;                         //        中断方式:下降沿。
  56.         EX0=1;                         //        开启外部中断。


  57. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于防抖动标志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  58.         TH1=TIME1H;
  59.         TL1=TIME1L;
  60.         TR1=1;                         //开启定时器1
  61.         ET1=1;                         //开定时器1中断

  62.         EA=1;

  63.         while(1)
  64.         {
  65.         if(b_KeyScan==1)                   //如果有按键按下,则进行按键扫描和键码处理。
  66.                 {
  67.                 b_KeyScan=0;
  68.                 vKeyProcess(ucKeyScan());
  69.                 }
  70.         }
  71. }



  72. //*************************************************************************************************
  73. //*                                                                                                                                                                                                  *
  74. //*                ******************************外部中断0,用于开启键盘扫描及键码处理******************          *
  75. //*                                                                                                                                                                                                  *
  76. //*************************************************************************************************
  77. void vINT0(void) interrupt 0
  78. {
  79.         if(b_KeyShock==0)
  80.                 {
  81.                         b_KeyScan=1;                        //开启键盘扫描标志。
  82.                         b_KeyShock=1;                        //设置防抖动标志。
  83.                 }
  84.         else b_KeyShock=0;                                //如果有抖动则不执行键扫描,恢复防抖动标志。

  85. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        
  86.         if(b_KeyShock==1)
  87.                 b_KillShock=1;                                //如果防抖动标志位开启则开启防抖动标志清除位,
  88.                                                                         //300ms后清除防抖动标志。

  89. }


  90. //*************************************************************************************************
  91. //*                                                                                                                                                                                                  *
  92. //*                ****************定时器1中断,用于计时功能和防抖动标志清除***************************          *
  93. //*                                                                                                                                                                                                  *
  94. //*************************************************************************************************
  95. void vTimer1(void) interrupt 3
  96. {
  97. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  98. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  99. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  100.         if(b_KillShock==1)
  101.                 {
  102.                 if(uc_KillCount==5)                         //当防抖动标志位为1时,计时300ms后清除抖动标志位。
  103.                         {
  104.                         b_KeyShock=0;
  105.                         b_KillShock=0;
  106.                         uc_KillCount=0;
  107.                         }
  108.                 else uc_KillCount++;
  109.                 }
  110. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  111. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复定时器1溢出时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  112. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  113.         TH1=TIME1H;
  114.         TL1=TIME1L;
  115. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表