该仿真由12864和51单片机组成。
按下按键按什么就可以在12864上面显示什么。通过这个代码可以粗略的学习如何在proteus上面使用12864液晶显示屏。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- //*************************************************************************************************
- //*************************************************************************************************
- //**<程序名>:俄罗斯方块游戏 **
- //**<版本说明>:此版是第一版,在LCD1608第4版基础上改进而来,目前只可以绘制游戏区域的边框。 **
- **
- //*************************************************************************************************
- //*************************************************************************************************
- //*************************************************************************************************
- //* *
- //* ******************************头文件及宏定义************************** *
- //* *
- //*************************************************************************************************
- #include "includes.h"
- #define TIME1H 0x3C
- #define TIME1L 0xB0 //定时器1溢出时间: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};
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- bit b_KeyShock=0; //键盘防抖动标志位。
- //当按键中断产生时,首先判断此位。
- //0--执行键盘扫描及键码处理程序;1--不执行。
- bit b_KillShock=0; //防抖标志清除位:0--不清除;1--清除。
- unsigned char uc_KillCount=0; //抖动标志清除计数,使用定时器1。
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<键盘扫描开启标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- bit b_KeyScan=0; //0--不扫描;
- //1--扫描。
- //*************************************************************************************************
- //* *
- //* ********************************主函数****************************** *
- //* *
- //*************************************************************************************************
- /*********************** 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,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- IT0=1; // 中断方式:下降沿。
- EX0=1; // 开启外部中断。
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于防抖动标志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- TH1=TIME1H;
- TL1=TIME1L;
- TR1=1; //开启定时器1
- ET1=1; //开定时器1中断
- EA=1;
- while(1)
- {
- if(b_KeyScan==1) //如果有按键按下,则进行按键扫描和键码处理。
- {
- b_KeyScan=0;
- vKeyProcess(ucKeyScan());
- }
- }
- }
- //*************************************************************************************************
- //* *
- //* ******************************外部中断0,用于开启键盘扫描及键码处理****************** *
- //* *
- //*************************************************************************************************
- void vINT0(void) interrupt 0
- {
- if(b_KeyShock==0)
- {
- b_KeyScan=1; //开启键盘扫描标志。
- b_KeyShock=1; //设置防抖动标志。
- }
- else b_KeyShock=0; //如果有抖动则不执行键扫描,恢复防抖动标志。
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- if(b_KeyShock==1)
- b_KillShock=1; //如果防抖动标志位开启则开启防抖动标志清除位,
- //300ms后清除防抖动标志。
- }
- //*************************************************************************************************
- //* *
- //* ****************定时器1中断,用于计时功能和防抖动标志清除*************************** *
- //* *
- //*************************************************************************************************
- void vTimer1(void) interrupt 3
- {
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
51单片机12864大液晶屏proteus仿真.rar
(86.13 KB, 下载次数: 26)
|