当前位置: 代码迷 >> 单片机 >> 定时计数器有关问题(秒表实验)
  详细解决方案

定时计数器有关问题(秒表实验)

热度:71   发布时间:2016-04-28 15:27:40.0
定时计数器问题(秒表实验)
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int 
int s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit key =P2^0;
sbit key1= P2^1;
void disp(int i,int j);
void delay(int a);
uchar xianshi=0, shijian=0;
void main()
{
TMOD=0x01;  //定义定时器
TH0=0xFC;   //定时器初值1ms
TL0=0x66;


 
TR0=1; //启动定时器 
EA=1;  //启动中断
ET0=1;   //允许开启中断

while(1)
{
  
disp((xianshi/10),(xianshi%10));

if(xianshi==60)
{
xianshi=0;
}
}
}
void int_0() interrupt 1
{
shijian++;
if(shijian==1000)   //加到1000不就是1S吗?为何加不到1000呢?到256就不会动了!
{
xianshi++;
}

TH0=0xFC;
TL0=0x66; 
 

}  
void disp(int i,int j)
{
  key=1;
key1=0;
P1=s[j];
delay(10);
key=0;
key1=1;
P1=s[i];
delay(10); 

}  
void delay(int a)
{
int i,j;
for(i=a;i>0;i--)
for(j=110;j>0;j--);

------解决方案--------------------
if(shijian==1000)   //加到1000不就是1S吗?为何加不到1000呢?到256就不会动了!

你看清楚你前面的定义uchar xianshi=0, shijian=0;

char类型最大是256,当然不会到1000了,应该定义成int类型的
  相关解决方案