简单的51单片机时钟程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单的51单片机时钟程序,可以通过按键来设置时间,按键可以自己更改。

#include

#define uint unsigned int

#define uchar unsigned char

#define tt 46080 //设置时间间隔,对应11.0592MHZ的晶振

uchar code table[]="Happy every day!";

uchar code table1[]="00:00:00";

uchar num,hh,mm,ss,t,s1num=0;

sbit en=P3^4;

sbit rs=P3^5;

sbit rw=P3^6;

sbit s1=P3^0;

sbit s2=P3^1;

sbit s3=P3^2;//按键所用的端口

sbit s4=P3^3;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--); //大约是1ms,因为单片机的时钟周期为11.0592mhz。

}

void write_com(uchar com)

{

rs=0; //指令

P0=com; //写指令函数

delay(1);

en=1;

delay(1);

en=0;

}

void write_data(uchar dat)

{

rs=1; //数据

P0=dat; //写指令函数

delay(1);

en=1;

delay(1);

en=0;

}

void init()

{

en=0; //初始时使能为0

rw=0;

write_com(0x38); //显示屏模式设置为1602方案write_com(0x0c);

write_com(0x06); //显示开关/光标设置

write_com(0x01); //清屏

write_com(0x80); //指针置零

for(num=0;num<16;num++)

write_data(table[num]);

write_com(0xc3);

for(num=0;num<8;num++)

write_data(table1[num]);

}

void dingshi()

{

TMOD=0x01; //确定定时器工作模式(定时模式)TH0=(65536-tt)/256; //赋初值为tt微秒

TL0=(65536-tt)%256; //不赋值时默认其值是0

EA=1; //开总中断

ET0=1; //开定时器0中断

// IE=0x82; //总线写法

TR0=1; //启动定时器0 总线TCON=0x10;

}

void shuanxin(uchar add,uchar date)

{

uchar shi,ge;

write_com(0xc3+add); //指针指向

shi=date/10;

ge=date%10;

write_data(0x30+shi);

write_data(0x30+ge); //指针自动后移,故不必再写指针位置

}

/***************借助蜂鸣器接地起作用***************/ void keyscan()

{

if(s1==0)

{

delay(5);

if(s1==0)

{

s1num++;

while(!s1);

if(s1num==1)

{

TR0=0; //时钟停止运行

write_com(0xca); //指针指向ss

write_com(0x0f); //光标闪烁

}

if(s1num==2)

{

write_com(0xc7); //指针指向mm

write_com(0x0f);

}

if(s1num==3)

{

write_com(0xc4); //指针指向hh

write_com(0x0f);

}

if(s1num==4)

{

s1num=0;

TR0=1; //时钟运行

write_com(0x0c); //取消闪烁

}

}

}

/***************调节时间****************/

if(s1num!=0) //目的是使s1按下的前提才起作用{

if(s2==0)

{

delay(5);

if(s2==0)

{

while(!s2); //松手检测,松手后方可向下执行

if(s1num==1)

{

ss++;

if(ss==60)

ss=0;

shuanxin(6,ss);

write_com(0xca);

}

if(s1num==2)

{

mm++;

if(mm==60)

mm=0;

shuanxin(3,mm);

write_com(0xc7);

}

相关文档
最新文档