找回密码
 立即注册

QQ登录

只需一步,快速开始

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

帮忙指导下嘛 看看我的程序有错没 帮我改下嘛

[复制链接]
跳转到指定楼层
楼主
ID:129825 发表于 2016-7-13 18:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Tab0[]=  //定义数码管数组,没有小数点
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uchar code Tab1[]=  //定义数码管数组,有小数点
{
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef
};
void Delay(uchar x);  //延时函数
void Display0();   //时间显示函数
void Display2();  //时间设置显示函数
void Init();    //中断初始化函数
uchar Hours=23,Minutes=56,seconds=55;  //分别定义三个变量表示时、分、秒
uchar Time0_bit=0;   //用于定时器0的溢出标志
bit Set_Time=0;    //设置时 闪烁时长的标志位
bit Set0=0;     //设置时间标志,确定是设置‘分’还设置‘时’
void main()
{
Init();          //中断初始化
while(1)         //死循环
  {
  
       Display0();   //显示时间        
      
      }
   
       }
void Time0() interrupt 1      //定时器0函数
{
TH0=(65536-50000)/256;        //重装初值
TL0=(65536-50000)%256;
Time0_bit++;
if((Time0_bit%10)==0)     //每溢出10次Time0_bit取反一次
  Set_Time=~Set_Time;       //0.5秒闪烁一次
if(Time0_bit==20)      //以下为时间数据处理
  {
   Time0_bit=0;
   seconds++;
   if(seconds==60)
    {
     seconds=0;
     Minutes++;
     if(Minutes==60)
      {
       Minutes=0;
       Hours++;
       if(Hours==24)
        {
         Hours=0;
        }
      }
    }
  }
}
void Init()        //中断初始化函数
{
EA=1;        //开总中断
TMOD=0X01;        //定时器工作方式选择,定时器0和定时器1都选择第1种工作方式
TH0=(65536-50000)/256;   //定时器0装初值,定时50ms
TL0=(65536-50000)%256;
ET0=1;       //开定时器0开关
TR0=1;          //开定时器0小开关
}
void Display2()       //时间设置时的显示函数
{
if(Set0==0)       //判断是否为设置‘时’还是‘分’
  {
   P0=Tab0[seconds%10];  //显示秒的个位
   P1=0xdf;     //段选
   Delay(10);     //延时
   P0=0X00;     //消隐
  
   P0=Tab0[seconds/10];  //显示秒的十位
   P1=0xef;     //段选
   Delay(10);     //延时
   P0=0X00;     //消隐
   
   if(Set_Time)    //这个if语句实现分钟以0.5秒的频率闪烁
    {
     P0=Tab1[Minutes%10];  //显示分的个位,需要加上小数点做分隔符
     P1=0xf7;     //段选
     Delay(10);     //延时
     P0=0X00;     //消隐
     P0=Tab0[Minutes/10];  //显示分的十位
     P1=0xfb;     //段选
     Delay(10);     //延时
     P0=0X00;     //消隐
    }
   else
    {
     P0=0x00;  //显示分的个位,需要加上小数点做分隔符
     P1=0xf7;     //段选
     Delay(10);     //延时
     P0=0X00;     //消隐
  
     P0=0x00;  //显示分的十位
     P1=0xfb;     //段选
     Delay(10);     //延时
     P0=0X00;     //消隐
    }
   
   P0=Tab1[Hours%10];   //显示时的个位,需要加上小数点做分隔符
   P1=0xfd;     //段选
   Delay(10);     //延时
   P0=0X00;     //消隐
  
   P0=Tab0[Hours/10];   //显示时的十位
   P1=0xfe;     //段选
   Delay(10);     //延时
   P0=0X00;     //消隐
  }

else   //‘时’钟闪烁
  {
   P0=Tab0[seconds%10];  //显示秒的个位
   P1=0xdf;     //段选
   Delay(10);     //延时
   P0=0X00;     //消隐
  
   P0=Tab0[seconds/10];  //显示秒的十位
   P1=0xef;     //段选
   Delay(10);     //延时
   P0=0X00;     //消隐
   
   P0=Tab1[Minutes%10];  //显示分的个位,需要加上小数点做分隔符
   P1=0xf7;     //段选
   Delay(10);     //延时
   P0=0X00;     //消隐
   P0=Tab0[Minutes/10];  //显示分的十位
   P1=0xfb;     //段选
   Delay(10);     //延时
   P0=0X00;     //消隐
   
   if(Set_Time)    //这个if语句实现‘时’钟以0.5秒的频率闪烁
    {
     P0=Tab1[Hours%10];   //显示时的个位,需要加上小数点做分隔符
     P1=0xfd;     //段选
     Delay(10);     //延时
     P0=0X00;     //消隐
   
     P0=Tab0[Hours/10];   //显示时的十位
     P1=0xfe;     //段选
     Delay(10);     //延时
     P0=0X00;     //消隐
    }
   else
    {
     P0=0x00;   //显示时的个位,需要加上小数点做分隔符
     P1=0xFF;     //段选
     Delay(10);     //延时
     P0=0X00;     //消隐
   
     P0=0X00;   //显示时的十位
     P1=0xFF;     //段选
     Delay(10);     //延时
     P0=0X00;     //消隐   
    }  
  }
}
void Display0()   //显示时钟
{
P0=Tab0[seconds%10];  //显示秒的个位
P1=0xdf;     //段选
Delay(10);     //延时
P0=0X00;     //消隐
P0=Tab0[seconds/10];  //显示秒的十位
P1=0xef;     //段选
Delay(10);     //延时
P0=0X00;     //消隐
P0=Tab1[Minutes%10];  //显示分的个位,需要加上小数点做分隔符
P1=0xf7;     //段选
Delay(10);     //延时
P0=0X00;     //消隐
P0=Tab0[Minutes/10];  //显示分的十位
P1=0xfb;     //段选
Delay(10);     //延时
P0=0X00;     //消隐
P0=Tab1[Hours%10];   //显示时的个位,需要加上小数点做分隔符
P1=0xfd;     //段选
Delay(10);     //延时
P0=0X00;     //消隐
P0=Tab0[Hours/10];   //显示时的十位
P1=0xfe;     //段选
Delay(10);     //延时
P0=0X00;     //消隐
}

void Delay(uchar x)      //延时
{
uchar i,j;
for(i=x;i>0;i--)
  for(j=110;j>0;j--);
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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