单片机c语言计时编程,单片机C程序-优化计时(只显示有效位)

本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52;找到相应部分即可.这是一整个单片机开发板的电路图其他的忽略.

hex文件及其工程文件下载:http://www.51hei.com/f/youhuajs.rar以下是通过测试的源代码:

/**

*功能:实现一秒优化计时(只显示有效位),0~59;

*作者:徐冉

*日期:2013-05-02

**/

/************AT89C52-RC 单片机-51hei-5实验板***********/

/*******************51hei-开发板**********************/

#include

typedef unsigned int uint;

typedef unsigned char uchar;

sbit wela = P2^7;

sbit dula = P2^6;

uchar counter,shi,ge;

uint num;

void init();

void display(uint num1);

void delay(uint xms);

//数码管编码

uchar code table[] = {

0x3F,  //"0"

0x06,  //"1"

0x5B,  //"2"

0x4F,  //"3"

0x66,  //"4"

0x6D,  //"5"

0x7D,  //"6"

0x07,  //"7"

0x7F,  //"8"

0x6F  //"9"

};

//主程序

void main()

{

init();

while(1)

{

display(num);

}

}

//定时器初始化程序

void init()

{

TMOD = 0x01;

TH0 = 0xB8;//精确定时20毫秒

TL0 = 0x00;

TR0 = 1;

EA = 1;

ET0 = 1;

}

//显示子程序

void display(uint num1)

{

shi = num1 / 10 % 10;

ge = num1 % 10;

if(num1 < 10)

{

dula = 1;

P0 = table[ge];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xdf;

wela = 0;

delay(1);

}

else

{

dula = 1;

P0 = table[shi];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xef;

wela = 0;

delay(1);

dula = 1;

P0 = table[ge];

dula = 0;

P0 = 0xff;

wela = 1;

P0 = 0xdf;

wela = 0;

delay(1);

}

}

//延时程序

void delay(uint xms)

{

uint i,j;

for(i = xms; i > 0; i--)

for(j = 110; j > 0; j--);

}

//定时器0中断服务子程序

void int_time0() interrupt 1

{

TH0 = 0xB8;

TL0 = 0x00;

counter++;

if(counter == 50)

{

counter = 0;

num++;

if(num == 60)

num = 0;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值