单片机解密LCD1602 AT89s52单片机定时闹钟
单片机解密#include<reg52.h>
单片机解密#include<stdlib.h>
单片机解密#include<intrins.h> //包含_nop_()函数定义的头文件
unsigned char code digit[ ]={"0123456789"}; //LCD1602初始化字符
unsigned char code str_1[ ]={"Set delay time:"};
unsigned char code str_2[ ]={" Count time: "};
unsigned char count; //Timer0计数溢出中断次数
unsigned char s,m,h; //即时的(秒,分,时)变量
unsigned char ss,mm,hh;//预设定时(秒,分,时)变量
unsigned char i; //循环变量
sbit RS=P2^0; //LCD寄存器选择位,将RS位定义为P2.0引脚
sbit RW=P2^1; //LCD读写选择位,将RW位定义为P2.1引脚
sbit E=P2^2; //LCD使能信号位,将E位定义为P2.2引脚
sbit BF=P0^7; //LCD忙碌标志位,
sbit run=P1^0; //启动计时按钮检测
unsigned char runing=0; //0非计时运行,1计时运行
sbit h_up=P1^1; //h+ 按钮检测
sbit h_dn=P1^2; //h- 按钮检测
sbit set=P1^3; //pause钮检测
sbit m_up=P1^4; //分钟+按钮检测
sbit m_dn=P1^5; //分钟减按钮检测
sbit alarm=P2^7; ////引脚用于触发音乐IC模块播放音乐
// 延时ms函数////////////////////////
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
/////////////////////////////////////
//函数:判断LCD状态,result=1忙碌;result=0就绪
unsigned char BusyTest(void)
{
bit result;
RS=0; //RS低电平,RW高电平,可读状态
RW=1;
E=1; //允许读写
_nop_();
_nop_();
_nop_();
_nop_();
result=BF; //rultes ← LCD状态标志
E=0; //恢复低电平
return result;
} /////////////////////////////////////////
//函数:将模式设置指令或显示地址写入LCD ////
void WriteInstruction (unsigned char dictate)
{
while(BusyTest()==1); //如果忙就等待
RS=0; //RS和R/W同时为低电平时,可以写入指令
RW=0;
E=0; //准备E从0到1发生正跳变,作为写指令
_nop_();
_nop_(); //空操作两个机器周期,给硬件反应时间
P0=dictate; //将数据送入P0口,即写入指令或地址
_nop_();
_nop_();
_nop_();
_nop_();
E=1; //E置高电平
_nop_();
_nop_();
_nop_();
_nop_();
E=0; //当E由高电平跳变成低电平时,LCD开始执行命令
} //////////////////////////////////////////

芯片解密