六位共阴数码管时钟显示程序

#include<reg52.h> // 包含51 单片机寄存器定义的头文件
#define uchar unsigned char
#define uint unsigned int  
sbit dula=P2^6;
sbit wela=P2^7;

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar int_time ; //中断次数计数变量
uchar second; //秒计数变量
minute; //分钟计数变量
uchar hour; //小时计数变量

void delay(uint z) //延时函数,延时约1ms
{
 uchar x,y;    
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

/******************************************************************
函数功能:显示秒的子程序
入口参数:s
********************************************************************/
void DisplaySecond(uchar s)
{
 wela=1;
 P0=0xef; //DS5点亮
 wela=0;
 P0=0xff; //消隐 
 dula=1;
 P0=table[s/10]; //显示十位
 dula=0;
 delay(1);

 wela=1;
 P0=0xdf; //DS6点亮
 wela=0;
 P0=0xff; //消隐 
 dula=1;
 P0=table[s%10]; //显示个位
 dula=0;
 delay(1);
}
/******************************************************************
函数功能:显示分钟的子程序
入口参数:m
********************************************************************/
void DisplayMinute(uchar m)
{
 wela=1;
 P0=0xfb; //DS3点亮
 wela=0;
 P0=0xff; //消隐 
 dula=1;
 P0=table[m/10]; //显示十位
 dula=0;
 delay(1);

 wela=1;
 P0=0xf7; //DS4点亮
 wela=0;
 P0=0xff; //消隐 
 dula=1;
 P0=table[m%10]; //显示个位
 dula=0;
 delay(1);
}

/******************************************************************
函数功能:显示小时的子程序
入口参数:h
********************************************************************/
void DisplayHour(uchar h)
{
 wela=1;
 P0=0xfe; //DS1点亮
 wela=0;
 P0=0xff; //消隐 
 dula=1;
 P0=table[h/10]; //显示十位
 dula=0;
 delay(1);

 wela=1;
 P0=0xfd; //DS2点亮
 wela=0;
 P0=0xff; //消隐 
 dula=1;
 P0=table[h%10]; //显示个位
 dula=0;
 delay(1);  
}
/************初始化************/ 
void init()
{
 TMOD=0x01; //使用定时器T0
 EA=1; //开中断总允许
 ET0=1; //允许T0 中断
 TH0=(65536-50000)/256; //定时器高八位赋初值
 TL0=(65536-50000)%256; //定时器低八位赋初值
 TR0=1;
 int_time=0; //中断计数变量初始化
 second=0; //秒计数变量初始化
 minute=0; //分钟计数变量初始化
 hour=0; //小时计数变量初始化
}   

/******************************************************************
函数功能:主函数
********************************************************************/
void main()

 init();
 while(1)
 {
  DisplaySecond(second); //调用秒显示子程序
  delay(1);
  DisplayMinute(minute); //调用分钟显示子程序
  delay(1);
  DisplayHour(hour);     //调用小时显示子程序
  delay(1);
  
 }
}
/******************************************************************
函数功能:定时器T0的中断服务子程序
********************************************************************/
void interserve() interrupt 1 //using Time0
{
 int_time++;
 if(int_time==20)//控制速度
 {
  int_time=0; //中断计数变量清0
  second++; //秒计数变量加1
 }
 if(second==60)
 {
  second=0; //如果秒计满60,将秒计数变量清0
  minute++; //分钟计数变量加1
 }
 if(minute==60)
 {
  minute=0; //如果分钟计满60,将分钟计数变量清0
  hour++; //小时计数变量加1
 }
 if(hour==24)
 {
     hour=0; //如果小时计满24,将小时计数变量清0 
 }
 TH0=(65536-50000)/256; //定时器重新赋初值
 TL0=(65536-50000)%256;
 
}

期待 发表于09-23 15:33 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

期待
期待(总统)
金币:32864个|学分:91382个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号