单片机快速入门: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大液晶屏俄罗斯方块游戏 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 和LCD1602的不同是什么?各自的优势是哪些?-ZOL问答LCM是液晶显示模组它包括相应的驱动电路和控制电路可以直接与单片机相连。12864是指该屏幕的分辨率是128X64打个比方吧:你出差见一个非常重要的客户,你电脑...
单片机 肿么把一个实时的数字显示到液晶屏 12864 (带字库)上-ZO...然后对于现实的数字,直接用字符“xx”发送到12864里面在函数里面确定显示的位置即可。对于实时数据,数据每刷新一次,则重新发送一次数据即可。新的数据会自动...
即怎么用 单片机 调节LCD 12864 的背光亮度?你可以采用1楼的方案,如果你不懂,你还可以使用X9C103芯片,就是程控电位器芯片,与滑动变阻器一样,只是通过程序去控制它而已,这样就完全可以实现您的功能了...
用STC 单片机12864 液晶屏只有背光亮字不显示原因有哪些?[回答]深圳市川航电子告诉您:深圳市川航电子的12864液晶屏,店家发了说明书和程序,我收到用STC单片机一直显示不了,就只有背光亮,最好找店家处理解决了,现...
51 单片机 上接 12864 液晶屏时的上拉电阻是肿么接的?-ZOL问答如果接的是p0口,那么上拉电阻就选10k的排阻就行,可以去找那种九个脚的,八个角接液晶的八个数据端,最后那一个脚接+5v电源,如果接的是单片机的其他口则不需要接上...
hdg 12864 与lcd 12864 的区别?LCD12864和LCM12864的区别在于:1、LCM12864带字库;LCD12864不带字库。2、LCD12864是液晶显示器,一般是指单独的屏幕;LCM12864是液晶显示模组,它包括相应...
想要搞个项目,有关 单片机 方面的,做什么好呢?比较综合的做一个计算器好玩的可以用12864或1602做个小游戏,贪食蛇、推箱子啦能够提升能力的还是去做一些模块了,比如无线通讯、红外比较综合的做一个计算器...
请问计算器的十位和十二位用法上会有什么区别?位数就是最多可以显示多少个数字。8位计算器最多显示8位,12位计算器最多显示12位。假如计算器是10位显示的。可以先计算2的开方,按2键和开方键,显示的...这样...
自动售货机的plc系统设计?洗衣自动售货机费用是多少[回答]LC课程设计目录,任务描述,控制要求,系统配置及输入/输出继电器地址分配,程序设计,整体运行梯形图,实验心得,参考文献。对排水系统进...对排...
12864 液晶屏屏幕太暗,怎么解决 - 小梦梦amiee 的回答 - 懂得问题描述不详。亮度是调整背光。既然V0位置有接电位器,对比度也可调节那就证明是你的背光亮度不够,可以改小一下背光正极脚位上的限流电阻试试。。...