51单片机电子时钟单片机电子时钟C语言程序语言程序
51最基础简单易懂的单片机,差不多一个月的时间,断断续续地学习,终于算是学完了,下个目标是飞思卡尔
s12x和k60 也就是ARM crotex-M4架构. 51最核心的部分,我觉得是中断的使用,一个项目离不开中断,还有就
是串口的理解,还有就是IIC通信。
以 电子时钟 为结尾篇,附上代码。代码有些不怎么完美。但终究是差不多写出来了。结合了IIC通信,中断定时器的使用,键
盘使用,还有液晶的显示。
#include <reg52.h>
sbit RS = P2^7;
sbit RW = P2^6;
sbit E = P2^5;
sbit Sda = P2^0;
sbit Scl = P2^1;
sbit keyleft = P1^0;
sbit keyup = P1^1;
sbit keydown = P1^2;
sbit keyright = P1^3;
unsigned char sec=0,min=0,hour=0;
unsigned char Year[20]=" 2012.10.1 ";
unsigned char i;
unsigned int times = 0;
unsigned char countleft = 0,countright = 0;
unsigned char busycheck();
static void Start(void)
{
Sda = 1;
Scl = 1;
Sda = 0;
}
static void Stop(void)
{
Sda = 0;
Scl = 1;
Sda = 1;
}
static unsigned char Respons(void)
{
unsigned char OverTime = 0; //超时
unsigned char TempFlag = 0;
OverTime = 0;
Sda = 1; //释放数据线
Scl = 1;
while(1)
{
if(Sda) //应答信号没来
{
if(OverTime++ > 200)
{
TempFlag = 0; //应答信号长时间没有来,认为无应答
break;
}
}
else
{
TempFlag = 1; ///检测到应答信号
break;
}
}
Scl = 0;
return TempFlag;
}
static void NoRespons(void) //非应答
{