怎样用C语言作延时1S的程序

怎样用C语言作延时1S的程序
#include "HT46F47E.h"

#pragma vector isr_4 @ 0x4 //外部中断
#pragma vector isr_8 @ 0x8 //定时计数器中断
#pragma vector isr_c @ 0xc //AD中断

unsigned char us; //定义微秒级变量
unsigned char ms; //定义毫秒级变量
unsigned char seg_sel; //定义所有七段显示器的公共端
unsigned char second; //定义1秒为单位的变量

const unsigned char seg[10]={0x18,0x7e,0x29,0x2a,0x4e,0x8a,0x88,0x3e,0x08,0x0a};
//七段显示器内容数组,顺序对应0-9的显示
void isr_4(){} //安全设置
void isr_c(){} //安全设置

void program_init() //程序初始化
{
_pac=0x00; //设置所有的PA端口为输出
_pa=0xff; //设置所有的PA端口输出为高电平
_pbc=0x00; //设置所有的PB端口为输出
_pb=0xff; //设置所有的PB端口输出为高电平
_tmrc=0x9a; //计时器模式
_tmr=131; //计时器初值
_emi=1; //开全局中断
_eti=1; //开定时器中断
us=20; //设置us初始值
ms=100; //设置ms初始值
seg_sel=0; //设置选择第0个七段显示器
second=0; //设置second变量初始值
}

void isr_8() //定时器中断处理程序
{
us--; //变量us减1
if(!us) //如果us等于0则
{
us=20; //us等于20
ms--; //ms减1
if(!ms) //如果ms为0则
{
ms=100; //ms重置为100
second++; //秒变量加1
if(second>=60) //如果秒变量超过60
{
second=0; //则秒变量重置为0
}
}
}
}

void display_seg(x) //7段数码管显示程序
{
_pa=seg[x]; //显示七段显示器
_delay(5000); //延时大约50ms
}

void time_display() //时间显示程序
{
int sel_l; //定义一个秒变量的低8位变量(秒钟的个位)
int sel_h; //定义一个秒变量的高8位变量(秒钟的十位)
sel_l=second; //将秒变量的数值赋值给低8位变量
sel_l%=10; //除以10后取佘数
sel_h=second; //将秒变量的数值赋值给低高8位变量
sel_h/=10; //除以10后取商
switch(seg_sel) //确定显示器件
{
case 0: //如果为0
_pb0=1; //则开启秒钟的个位数管公共端按制脚(共阳数码管)
display_seg(sel_l); //调用七段显示器显示子程序
break; //返回
case 1: //如果为1
_pb3=1; //则开启秒钟的十位数管公共端按制脚(共阳数码管)
display_seg(sel_h); //调用七段显示器显示子程序
break; //返回
default: //其它
break; //返回
}

_pb=0x00; //关闭所有显示
seg_sel++; //显示下一个七段显示器
if(seg_sel>=2) //如果该变量为2以上,则重置为0
{
seg_sel=0;
}
} //时间显示子程序结束

void main() //主程序
{
program_init(); //调用程序初始化子程序
while(1) //开始
{
_clrwdt(); //清除看门狗计数器
time_display(); //调用显示子程序
}
} //主程序结束
请问怎样用上面的程序的定时计数器中断中的值作延时1S的程序?
void main() //主程序
{
program_init(); //调用程悉闹模序初始化子程序
unsigned char oldSecond;

oldSecond = second;

while(1) //开睁缓始
{
if(second >= oldSecond+1) //延时一秒
{
oldSecond = second;
_clrwdt(); //清除看门狗弯启计数器
time_display(); //调用显示子程序
}
}
} //主程序结束
sleep(1000)
← 上一篇: 下一篇: →