51单片机12864大液晶屏俄罗斯方块游戏 ROTEUS 教程
51单片机12864大液晶屏 显示任意字符(计算器)
ROTEUS 和51单片机教程(仿真文件+源代码)
参考源代码:
//*************************************************************************************************
//*************************************************************************************************
//**<程序名>:俄罗斯方块游戏 **
//**<版本说明>:此版是第一版,在LCD1608第4版基础上改进而来,目前只可以绘制游戏区域的边框。 **
//**<完成时间>:2007年8月28日 **
//**<作者>:从零开始单片机 **
**
//*************************************************************************************************
//*************************************************************************************************
//*************************************************************************************************
//* *
//* ******************************头文件及宏定义************************** *
//* *
//*************************************************************************************************
#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
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
if(b_KillShock==1)
{
if(uc_KillCount==5) //当防抖动标志位为1时,计时300ms后清除抖动标志位。
{
b_KeyShock=0;
b_KillShock=0;
uc_KillCount=0;
}
else uc_KillCount++;
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复定时器1溢出时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TH1=TIME1H;
TL1=TIME1L;
}
最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
如果需要 完整代码或设计文件,请在下方留言或者私信我,看到后会第一时间回复。
谢谢大家!
如果喜欢我的文章请评论转发加关注哦。
单片机快速入门:12864液晶屏实现多功能数字时钟
想要快速入门单片机,就要多动手实践。也许你的手上有不止一块的单片机开发板,但是你有没有亲自动手实现自己的想法?单片机实现数字时钟是一个不错的想法。有12864液晶显示屏、有按键、有DS18B20。最关键的,你能从一个小的实验设计中获得设计经验,熟悉产品开发的流程,你会慢慢爱上这一行。
文末会有原理图和hex程序文件的下载方式,可以更好的帮助你学习,感谢杜洋工作室。
器件清单
1.元器件清单
首先来看看所需要的清单:51单片机STC12C5A60S2、12864液晶屏、温度传感器DS18B20、时钟芯片DS1302、光敏电阻、四腿按键等。
STC12C5A60S2
所用单片机为国产51单片机,型号为STC12C5A60S2,DIP40封装。
12864液晶屏
显示器件为12864液晶屏。
时钟芯片DS1302
时钟采用DS1302芯片,配电池、32.768K的晶振。
温度传感器DS18B20
环境温度的检测用DS18B20来实现。
光敏电阻
光敏电阻用于感知白天和晚上。
四腿机械按键实现时钟调整、闹钟设置等功能。
2.实现原理图
这是整体的原理图。
3.整体外观和显示
未来时钟背面
焊接完成后的未来时钟背面。
闹钟调整界面
可以实现时间的显示,闹钟的设置,关键还有重要节气的显示。
正常显示界面
私信回复关键字:未来时钟 。即可获取原理图和hex文件。感谢杜洋工作室。
相关问答
51单片机 和 12864 的P0为何要接上拉电阻-ZOL问答51提供不了多少电流。借助电源的电流来使LED更亮。这里51起了一个控制的作用。51单片机P0口内部没有带上拉,需要外设,P2内部有P0口作为地址数据复用的时候...
单片机 光标显示問題 12864 方面的-ZOL问答12864的操作单位是两个字符(一个汉字),也就是你说的一个地址。光标也只能这样...你需要在12864的驱动程序里写一个可以显示字符串的子函数//在while里面,Setti...
单片机 中怎么实现 12864 动态小数点显示?比如你要的时钟秒闪小数点,那你可以在计时程序加到半秒的时候显示,加到一秒的时候让那个位显示空格相当于清除由于12864是一个地址写2个值(ASCII码)或一个中...
即怎么用 单片机 调节LCD 12864 的背光亮度?你可以采用1楼的方案,如果你不懂,你还可以使用X9C103芯片,就是程控电位器芯片,与滑动变阻器一样,只是通过程序去控制它而已,这样就完全可以实现您的功能了...
单片机 肿么把一个实时的数字显示到液晶屏 12864 (带字库)上-ZO...然后对于现实的数字,直接用字符“xx”发送到12864里面在函数里面确定显示的位置即可。对于实时数据,数据每刷新一次,则重新发送一次数据即可。新的数据会自动...
12864 和LCD1602的不同是什么?各自的优势是哪些?-ZOL问答LCM是液晶显示模组它包括相应的驱动电路和控制电路可以直接与单片机相连。12864是指该屏幕的分辨率是128X64打个比方吧:你出差见一个非常重要的客户,你电脑...
关于max485与 单片机 连接的问题?[回答]传统的单片机实验系统因其购买成本高、系统使用烦琐,已经越来越不适合当前以培养学生实际能力为主要方向的高等教育,本系统可以帮助学校轻松组建单...
采用通用的二十四小时制.该电路采用 51单片机 作为核心,功耗...[最佳回答]Thisdesignbydatadisplaymodule,temperatureacquisitionmodule,timeprocessingmodule,speechb...
12864 显示屏白屏-ZOL问答12864显示屏白屏显示器讨论回答(9)分析:显示器颜色显示不正常可能是内存或显...点亮小灯的数量应该由单片机查询得出,然后转换后输出显示到液晶上我有,串行...
关于光芒热水器的使用问题_一起装修网2018-05-292735975最新回答燃气热水器的声音大主要是排气扇在工作,这是几乎所有燃气热水器的通病,应该没问题的。你家的燃气是液化气还是天然气?原来液化气...