大家好,我编写了一个程序,程序可以运行,但是我想把显示的时间改一改,现在是每一秒减一次,我想60秒减一次,也就是以前数码管现实的是秒,现在改为分钟,但是我不论是改变定时的时间还是改变定义的类型都无法实现,请高手指教,程序如下:
*
********************************************************************************************************/
#include <AT89X51.H>
/*******************************************************************************************************
端口定义
*******************************************************************************************************/
sbit JZG =P3^7; /**晶闸管
sbit SW =P3^0; /*十位
sbit GW =P3^1; /*个位
sbit FMQ =P3^5; /*蜂鸣器
/*******************************************************************************************************
全局变量定义
*******************************************************************************************************/
unsigned short int timeout=0;//中间变量 (256-6)*timeout=count计时间隔
unsigned int count; //设定时间值;
//unsigned short int min; //
unsigned char code duanma[]= {0xed,0x41,0xdc,0xd9,0x71,0xb9,0xbd,0xc1,0xfd,0xf9};
/*{0x3f,0x06,0x5b,0x4f,0x66, //共阴极数码管段码
0x6d,0x7d,0x07,0x7f,0x6f};*/
/*******************************************************************************************************
函数声明
*******************************************************************************************************/
void delay(unsigned char); //延时
void run(void); //倒计时
void display(void); //显示
/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :
** 输入参数 :无
** 输出参数 :无
** Created by:
** Created Date:
*********************************************************************************************************
*/
void main(void) //主函数
{
unsigned char temp;
TMOD=0x02;
TH0=0x6; //125us
TL0=0x6;
ET0=1;
EA=1;
count=0;
while(1)
{
temp=P3&0x1c;//0xbc;
if(temp!=0x1c)//0xbc
{display(); //延时按键消抖 ,利用display()代替delay(),使显示稳定
temp=P3&0X1C;//0XBC
if(temp!=0x1c)//0xbc
switch(temp)
{
case 0x18:{count++;if(count>100)count=0;break;}
case 0x14:{count--;if(count>100)count=99;break;}
case 0x0c:{if(count!=0)run();;break;}
default :break;
}
while((P3&0x1c)==temp)display();
JZG=1;
}
FMQ=0;
display();
}
}
/*
*********************************************************************************************************
** 函数名称 :display()
** 函数功能 :LED数码管显示
** 输入参数 :无
** 输出参数 :无
** 用到的全局变量 :shuma[10]
**
** Created by:
** Created Date:
*********************************************************************************************************
*/
void display(void)
{
P1=duanma[count/10];SW=1;
delay(10);SW=0;
P1=duanma[count%10];GW=1;
delay(10);GW=0;
}
/*
*********************************************************************************************************
** 函数名称 :delay(unsigned char ms)
** 函数功能 :软件延时
** 输入参数 :unsigned char ms
** 输出参数 :无
**
** Created by:
** Created Date: 2009/11/02
*********************************************************************************************************
*/
void delay(unsigned char ms)
{
char i,j;
while(ms--)for(i=0;i<55;i++)for(j=0;j<10;j++);
}
/*
*********************************************************************************************************
** 函数名称 :run()
** 函数功能 :倒计时函数,时间倒数记到0,晶闸管导通,蜂鸣器响
** 输入参数 :无
** 输出参数 :无
**
** Created by:
** Created Date:
*********************************************************************************************************
*/
void run(void)
{ unsigned char k=0xff;
JZG=0;
TR0=1;
ET0=1;EA=1;
while(count)
{
display();
} JZG=1;
while(k--){FMQ=~FMQ; display();}
}
/*
*********************************************************************************************************
** 函数名称 :void t0(void) interrupt 1 using 0
** 函数功能 :定时器终端服务函数,为倒计时函数提供1秒计时
** 输入参数 :无
** 输出参数 :无
** 用到的全局变量 :timeout; 中间变量
count; 设定的时间
**
** Created by:
** Created Date:
*********************************************************************************************************
*/
void t0(void) interrupt 1 using 0
{
timeout++;
if(timeout==80000) /* 125*8000=1s */
{count--; timeout=0;}
if(count==0)TR0=0;
} |