找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用89c51单片机编写时钟程序 想改一下功能

[复制链接]
跳转到指定楼层
楼主
ID:156438 发表于 2016-12-21 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个程序每步的解释,想在加点每到1小时蜂鸣器喊5秒,每10分20分30分等时间数码管闪烁10次

#include <reg51.h>
sfr P1M0 =0x92;
sfr P1M1 =0x91;
char buf[4] ={0x01,0x02,3,4};
char hour=0,min=0,sec=0;
char code TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  
int time;
void delay(void){
   unsigned int j;
   j=1000;
   for(;j--;);
  }
unsigned int count=0;
void dir(void){
P0= TAB[buf[0]]  ;
P1=0x08;
  delay();
  P0=0xff;  //£¿£¿£¿
   P1=0x02;
P0= TAB[buf[1]]  ;
   if(count>10)P0&=0x7f;
P1=0x02;
  delay();
  P0=0xff;

  P1=0x04;
P0= TAB[buf[2]]  ;
  //if(count>10)P0&=0x7f;
  delay();
  P0=0xff;
P1=0x01;
P0= TAB[buf[3]]  ;
  delay();
  P0=0xff;
    P1=0x00;
}
void t1(void) interrupt  3 {
TL1= (char)(15536&0x00ff);
   TH1= (char)(15536>>8);
     count++;
   if(count>19){
    count=0;
    //buf[3]++;
    time++;
    if(time>3599)   time=0;
    hour++
    if(hour>23)
   }  
}   

void main(void){
char min,sec;
hour
   P1M0 =0x0f;
P1M1 =0x00;
  TMOD=0x10;  
TH1= (char)(15536>>8);
TL1= (char)(15536&0x00ff);  
IE=0x88;
  TR1=1;
while(1) {
  
  min=(char)(time/60) ;
  buf[0]=min/10;   buf[1]=min%10;
  
  sec=(char)(time%60) ;
  buf[2]=sec/10;   buf[3]=sec%10;
  
  dir();
  
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:111634 发表于 2016-12-21 20:32 | 只看该作者
1. 先要看懂别人正确的程序,才能理解自己程序每步的解释。看不懂正确的程序,给了你程序每步的解释,你也不会完全理解!
2. “每到1小时蜂鸣器喊5秒”,那到了1小时就喊5秒啊!问题是你不理解自己程序如何计时,知道了很容易的。
3. “每10分20分30分等时间数码管闪烁10次”,那到点了就闪啊!问题是你不理解自己程序如何计时,知道了很容易的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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