这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机C语言程序设计:100 000s 以内的计时程序

共1条 1/1 1 跳转至

单片机C语言程序设计:100 000s 以内的计时程序

高工
2013-10-25 15:38:18     打赏

/* 名称:100000s以内的计时程序

说明:在6只数码管上完成0~99999.9s

*/

#includereg51.h>

#includeintrins.h>

#defineucharunsignedchar

#defineuintunsignedint

//段码

uchar code

DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//6只数码管上显示的数字

ucharDigits_of_6DSY[]={0,0,0,0,0,0};

ucharCount;

sbitDot=P0^7;

//延时

voidDelayMS(uintms)

{

uchart;

while(ms--)for(t=0;t120;t++);

}

//主程序

voidmain()

{

uchari,j;

P0=0x00;

P3=0xff;

Count=0;

TMOD=0x01;

//计数器T0方式1

TH0=(65536-50000)/256; //50ms定时

TL0=(65536-50000)%256;

IE=0x82;

TR0=1; //启动T0

while(1)

{

j=0x7f;

//显示Digits_of_6DSY[5]~Digits_of_6DSY[0]的内容

//前面高位,后面低位,循环中i!=-1亦可写成i!=0xff

for(i=5;i!=-1;i--)

{

j=_crol_(j,1);

P3=j;

P0=DSY_CODE[Digits_of_6DSY[i]];

if(i==1)Dot=1; //加小数点

DelayMS(2);

}

}

}

//T0中断函数

voidTimer0()interrupt1

{

uchari;

TH0=(65536-50000)/256; //恢复初值

TL0=(65536-50000)%256;

if(++Count!=2)return;

Count=0;

Digits_of_6DSY[0]++; 位累加

for(i=0;i=5;i++)//进位处理

{

if(Digits_of_6DSY[i]==10)

{

Digits_of_6DSY[i]=0;

if(i!=5)Digits_of_6DSY[i+1]++;如果0~4位则分别向高一位进位

}

elsebreak;//若某低位没有进位,怎循环提前结束

}

}

单片机C语言程序设计:100 000s 以内的计时程序
扩展阅读:用计数器中断实现100以内的按键计数程序




关键词: 基础知识    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]