编写显示时钟的c语言程序,数码管显示模拟8位时钟C语言程序设计

//数码时钟设计

#include//  包含51单片机寄存器定义的头文件

unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //control  shape

unsigned char port[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char int_time ; //中断次数计数变量

unsigned char second;    //秒计数变量

unsigned char minute;    //分钟计数变量

unsigned char hour;     //小时计数变量

/

void delay(void)      //延时函数,延时约0.6ms

{

unsigned char j;

for(j=0;j<180;j++)

;

}

/******************************************************************

函数功能:显示秒的子程序

入口参数:s

********************************************************************/

void DisplaySecond(unsigned char s)

{

P2=0xbf;        //P2.6引脚输出低电平, DS6点亮

P0=Tab[s/10];          //显示十位

delay();

delay();

delay();

P2=0x7f;       //P2.7引脚输出低电平, DS7点亮

P0=Tab[s%10];         //显示个位

delay();

delay();

delay();

P2=0xff;     //关闭所有数码管

P0=0xff;

delay();

delay();

delay();

}

/******************************************************************

函数功能:显示分钟的子程序

入口参数:m

********************************************************************/

void DisplayMinute(unsigned char m)

{

P2=0xf7;   // P2.3引脚输出低电平, DS3点亮

P0=Tab[m/10];//显示个位

delay();

delay();

delay();

delay();

P2=0xef;   // P2.4引脚输出低电平, DS4点亮

P0=Tab[m%10];

delay();

delay();

delay();

P2=0xdf;   //P2.5引脚输出低电平, DS5点亮

P0=0xbf;   //分隔符“-”的段码

delay();

delay();

delay();

P2=0xff;   //关闭所有数码管

P0=0xff;

delay();

delay();

delay();

}

/******************************************************************

函数功能:显示小时的子程序

入口参数:h

********************************************************************/

void DisplayHour(unsigned char h)

{

P2=0xfe;        //P2.0引脚输出低电平, DS0点亮

P0=Tab[h/10];          //显示十位

delay();

delay();

delay();

P2=0xfd;       //P2.1引脚输出低电平, DS1点亮

P0=Tab[h%10];    //显示个位

delay();

delay();

delay();

P2=0xfb;     //P2.2引脚输出低电平, DS2点亮

P0=0xbf;     //分隔符“-”的段码

delay();

delay();

delay();

P2=0xff;     //关闭所有数码管

P0=0xff;

delay();

delay();

delay();

}

/******************************************************************

函数功能:主函数

********************************************************************/

void main(void)

{

TMOD=0x01;             //使用定时器T0

EA=1;                  //开中断总允许

ET0=1;                 //允许T0中断

TH0=(65536-46083)/256;  //定时器高八位赋初值

TL0=(65536-46083)%256;  //定时器低八位赋初值

TR0=1;

int_time=0;    //中断计数变量初始化

second=0;      //秒计数变量初始化

minute=0;     //分钟计数变量初始化

hour=0;       //小时计数变量初始化

while(1)

{

DisplaySecond(second);    //调用秒显示子程序

delay();

DisplayMinute(minute);   //调用分钟显示子程序

delay();

DisplayHour(hour);

delay();

}

}

/******************************************************************

函数功能:定时器T0的中断服务子程序

********************************************************************/

void interserve(void ) interrupt 1 using 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-46083)/256;   //定时器重新赋初值

TL0=(65536-46083)%256;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值