找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 437650|回复: 1158
打印 上一主题 下一主题
收起左侧

[原创][分享]新手写的多功能电子钟

  [复制链接]
跳转到指定楼层
楼主
ID:8456 发表于 2009-5-27 20:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

刚学的单片机,下面的程序是在学习中断和定时器时写的,已调试通过,
多功能电子钟有如下功能:
1,可以用来做电子钟
2,可以用做报警器(按P3.2时,用做报警)
3,可以用做闹钟(按P1.6时,用做闹钟)
4,可以显示星期
程度当中还有好多的不妥之处,还请高手门帮忙指正.
程序如下:
(由于注解太多,所以没有能写出来,请见谅!!),制作成功后的图片如附件.
内容如下:

#include <AT89X51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code dispcode[]={0x81,0x9f,0xa4,0x8c,0x9a,0xc8,0xc0,0x9d,0x80,0x88};
uchar code DATA[]={0xfc,0x92,0x98,0xac,0x89,0x01,0x5c,0x80,0x88};
uchar dispbitcode[]={0xfe,0xfd,0xfb,0xf7};
uchar dispbuf[8]={0,0,0,0};
uchar dispbitcnt;
uchar second,minite,hour,day;
uchar clockhour,clockminite;
uint tcnt;
uchar mstcnt;
uchar t;
uint a;
//上面的是定义各个变量和数码管缓存
void yanshi(uint t)
{
for(;t>0;t--);
}//延时子程序

void beep()
{
while(hour<clockhour){
for(a=0;a<1000;a++)
{yanshi(5);
P1_4=~P1_4;}
for(a=0;a<1000;a++)
{yanshi(5);
P1_4=~P1_4;}
for(a=0;a<5000;a++)
{yanshi(6);
P1_4=~P1_4;}
if(P3_6==0){break;}}
while(minite<clockminite){
for(a=0;a<1000;a++)
{yanshi(5);
P1_4=~P1_4;}
for(a=0;a<1000;a++)
{yanshi(5);
P1_4=~P1_4;}
for(a=0;a<5000;a++)
{yanshi(6);
P1_4=~P1_4;}
if(P3_6==0){break;}}}//报警子程序(P1.4接的是BEEP,P3.6为O时跳出)

void baojing()
{
if(P1_7==0){
yanshi(500);
if(P1_7==0){
while(1){
if(P1_7==1){
while(1){
beep();
if(P3_6==0)
{break;}}}
if(P3_6==0){break;}}}}}//报警执行子程序(用P1.7做信号检测脚,同样当P3.6为0时跳出)

void clock()
{
if(P3_3==0){yanshi(500);
if(P3_3==0){clockminite++;
if(clockminite==60)
{clockminite=0;}
dispbuf[3]=clockminite%10;
dispbuf[2]=clockminite/10;             
while(P3_3==0);}}
if(P3_6==0){yanshi(500);
if(P3_6==0){clockhour++;
if(clockhour==24){clockhour=0;}
dispbuf[1]=clockhour%10;
dispbuf[0]=clockhour/10;
while(P3_6==0);}}}//设定闹钟子程序

void key()
{
if(P3_6==0){yanshi(500);
if(P3_6==0){second++;
if(second==60){second=0;}           
while(P3_6==0);}}
if(P3_5==0){yanshi(1000);
if(P3_5==0){minite++;
if(minite==60){minite=0;}
dispbuf[3]=minite%10;
dispbuf[2]=minite/10;
while(P3_5==0);}}
if(P3_7==0){yanshi(500);
if(P3_7==0){hour++;
if(hour==24){hour=0;}
dispbuf[1]=hour%10;
dispbuf[0]=hour/10;
while(P3_7==0);}}
if(P3_4==0){yanshi(500);
if(P3_4==0){day++;
if(day==7){day=0; }
P2=DATA[day];
while(P3_4==0);}}
}//设定时间子程序

void laozhong()
{
if(hour==clockhour){
if(minite==clockminite){
for(a=0;a<1000;a++)
{yanshi(5);
P1_4=~P1_4;}
for(a=0;a<1000;a++)
{yanshi(5);
P1_4=~P1_4;}
for(a=0;a<5000;a++)
{yanshi(6);
P1_4=~P1_4;}}}}//闹钟子程序

void display()
{
dispbuf[3]=minite%10;
dispbuf[2]=minite/10;
dispbuf[1]=hour%10;
dispbuf[0]=hour/10;
P2=DATA[day];
}//显示子程序

void displayclock()
{
dispbuf[7]=clockminite%10;
dispbuf[6]=clockminite/10;
dispbuf[5]=clockhour%10;
dispbuf[4]=clockhour/10;
}//闹钟显示子程序

void time()
{
tcnt++;
if(tcnt==4000){tcnt=0;
second++;
if(second==60){second=0;
minite++;
if(minite==60){minite=0;
hour++;
if(hour==24){hour=0;
day++;
if(day==7){day=0;}}}}
display();}}//时间子程序

void t0(void) interrupt 1 using 0
{
mstcnt++;
if(mstcnt==4){mstcnt=0;
P0=dispcode[dispbuf[dispbitcnt]];
P1=dispbitcode[dispbitcnt];
P2=DATA[day];
dispbitcnt++;}
if(dispbitcnt==4){dispbitcnt=0;}
time();displayclock();}//中断

void main(void)
{
TMOD=0x02;
TH0=0x06;
TL0=0x06;
TR0=1;
ET0=1;
EA=1;
while(1)
{
key();clock();
if(P1_6==0)
{while(1){laozhong();
if(P3_6==0){break;}}}
if(P3_2==0){yanshi(10000);
if(P3_2==0){while(1)
{baojing();
if(P3_6==0)
{break;}
}}}}}
//S1:启动报警器(P3.2)
//S2: clock minite 加(P3.3)
//S3: 星期加(P3.4)
//S4:time minite 加(P3.5)
//S5: clock hour 加/退出报警器(P3.6)
//S6:time hour 加(P3.7)
//P1-7为信号检测脚


[此贴子已经被作者于2009-6-9 9:40:09编辑过]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:12101 发表于 2009-5-28 08:56 | 只看该作者
不错!!!
回复

使用道具 举报

板凳
ID:12101 发表于 2009-5-28 08:56 | 只看该作者
如果能用汇编写就更有挑战性了。
回复

使用道具 举报

地板
ID:13539 发表于 2009-5-28 15:48 | 只看该作者
来看看
回复

使用道具 举报

5#
ID:13521 发表于 2009-5-28 18:33 | 只看该作者
学习下
回复

使用道具 举报

6#
ID:13508 发表于 2009-5-28 20:52 | 只看该作者

新手想学习一下~谢谢了

回复

使用道具 举报

7#
ID:12253 发表于 2009-5-28 23:07 | 只看该作者
学习学习
回复

使用道具 举报

8#
ID:12322 发表于 2009-5-29 10:28 | 只看该作者

好东西多传传啊

回复

使用道具 举报

9#
ID:13578 发表于 2009-5-29 14:04 | 只看该作者

好东西多传传啊

回复

使用道具 举报

10#
ID:12718 发表于 2009-5-29 17:03 | 只看该作者
拜读一下
回复

使用道具 举报

11#
ID:12718 发表于 2009-5-29 17:11 | 只看该作者
提个建议好吗;unsigned int 何不在前面先宏定义为
#define uint unsigned int
编程可以少写字嘛
回复

使用道具 举报

12#
ID:10558 发表于 2009-5-30 15:54 | 只看该作者
有我需要的部分,谢谢
回复

使用道具 举报

13#
ID:7019 发表于 2009-5-30 16:22 | 只看该作者
学习了
回复

使用道具 举报

14#
ID:13622 发表于 2009-5-30 17:27 | 只看该作者

学习了

回复

使用道具 举报

15#
ID:8455 发表于 2009-5-30 21:07 | 只看该作者
看下,怎么样。
回复

使用道具 举报

16#
ID:13633 发表于 2009-5-30 21:38 | 只看该作者

不错不错

回复

使用道具 举报

17#
ID:5727 发表于 2009-5-30 22:26 | 只看该作者

good

回复

使用道具 举报

18#
ID:951 发表于 2009-5-31 08:23 | 只看该作者
学习中!!!
回复

使用道具 举报

19#
ID:13679 发表于 2009-5-31 21:43 | 只看该作者
学习一下
回复

使用道具 举报

20#
ID:3659 发表于 2009-5-31 21:55 | 只看该作者

我也是新手啊

回复

使用道具 举报

21#
ID:7193 发表于 2009-6-1 04:33 | 只看该作者
来看看~~~~~
回复

使用道具 举报

22#
ID:11531 发表于 2009-6-2 09:04 | 只看该作者

学习一下!

回复

使用道具 举报

23#
ID:13814 发表于 2009-6-5 15:33 | 只看该作者
也是新手,学学。
回复

使用道具 举报

24#
ID:13857 发表于 2009-6-6 14:13 | 只看该作者
新手

回复

使用道具 举报

25#
ID:12101 发表于 2009-6-7 14:15 | 只看该作者
不错呀!!!
回复

使用道具 举报

26#
ID:13897 发表于 2009-6-7 16:53 | 只看该作者
来看看咯
回复

使用道具 举报

27#
ID:12866 发表于 2009-6-8 16:28 | 只看该作者
很想学学
回复

使用道具 举报

28#
ID:12866 发表于 2009-6-8 19:19 | 只看该作者

美中不足:
  对于新手程序应该有解释,不能说每一句都要解释,最起码的要有,这个程序上 P1_4;P1_7;P3_3;P3_4;P3_5P3_6P3_7;以及P0;P1;P2;由于没有电路原理图,他们都是什么作用?应该加以注释;这样会更好一些,便于初学者入门,哈哈!当让行家一看就知道是怎么连接的

回复

使用道具 举报

29#
ID:13329 发表于 2009-6-8 21:25 | 只看该作者

看看,有实用先仿制

回复

使用道具 举报

30#
ID:13318 发表于 2009-6-8 22:31 | 只看该作者
参考一下
回复

使用道具 举报

31#
ID:8456 发表于 2009-6-9 09:34 | 只看该作者
yimajiadian 
说的是,我当时是嫌麻烦,所以没有写上,我从新修改了下
回复

使用道具 举报

32#
ID:14011 发表于 2009-6-9 19:53 | 只看该作者
以下是引用wuchengnian在2009-5-31 21:55:35的发言:

我也是新手啊

回复

使用道具 举报

33#
ID:14016 发表于 2009-6-9 20:11 | 只看该作者
回复

使用道具 举报

34#
ID:14031 发表于 2009-6-9 23:40 | 只看该作者
 看一下
回复

使用道具 举报

35#
ID:14076 发表于 2009-6-10 20:53 | 只看该作者
学习一下,看看是什么来着
回复

使用道具 举报

36#
ID:3751 发表于 2009-6-11 08:44 | 只看该作者
212313113131
回复

使用道具 举报

37#
ID:14101 发表于 2009-6-11 11:20 | 只看该作者
来学习的
回复

使用道具 举报

38#
ID:14127 发表于 2009-6-12 00:42 | 只看该作者

要学习学习!

回复

使用道具 举报

39#
ID:11838 发表于 2009-6-12 09:25 | 只看该作者
来借鉴学习~~
回复

使用道具 举报

40#
ID:14142 发表于 2009-6-12 12:42 | 只看该作者
来看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表