跟着教程学习51单片机,在做练习的时候,碰到了难题,原本是想做个秒表功能,但是只可以一直显示0.00,不能够自增计数(设想是从1.00-9.99自增循环计数),搞到半夜也搞不定,测试过,直接赋值某个数字,是可以静态显示的,但就是不自增,只好求教各位前辈!能编译,没有错误,有两个警告
单片机源程序如下:
/*********************************************************************
**********************************************************************
程序名称:
程序版本:V1.0
作 者:
编写时间:2022年4月6日
硬件支持:
接口说明:
修改日志:
N0.1:
**********************************************************************/
/*
**********************************************************************
* 头文件包含/SFR定义
**********************************************************************
*/
#include<reg52.h>
/*
**********************************************************************
* 本地数据类型/宏定义
**********************************************************************
*/
//typedef signed char int8; //8位有符号字符型
//typedef signed int int16; //16位有符号整型
//typedef signed long int32; //32位有符号长整型
typedef unsigned char uchar; //8位无符号字符型
typedef unsigned int uint; //16位无符号整型
//typedef unsigned long ulong; //32位无符号长整型
/*
**********************************************************************
* 单片机IO口位定义
**********************************************************************
*/
sbit duan=P2^6;
sbit wei=P2^7;
/*
**********************************************************************
* 本地全局变量/数组定义
**********************************************************************
*/
uchar code tableduan[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
uchar code tableduana[]={0xbf,0x86,0xdb,0xcf,0xe6, //带小数点的数组0-9
0xed,0xfd,0x87,0xff,0xef};
uint num,dis;
/*
**********************************************************************
* 函数原型声明
**********************************************************************
*/
display(uint);
delay(uchar);
/*********************************************************************
*函数名称:main
*函数功能:主函数
*函数调用:
*参数列表:无
*返 回 值:无
*结 果:
*备 注:
*********************************************************************/
void main(void)
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
TR0=1;
while(1)
{
if(num==20)
{
num=0;
if(dis==1000)
dis=0;
dis++;
}
display(dis);
}
}
void time0() interrupt 1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
num++;
}
display(uint dis)
{
wei=1;
P0=0xff;
wei=0;
P0=tableduana[dis/100];
duan=1;
duan=0;
wei=1;
P0=0xfe;
wei=0;
delay (10);
P0=tableduan[dis%100/10];
duan=1;
duan=0;
wei=1;
P0=0xfd;
wei=0;
delay (10);
P0=tableduan[dis%100%10];
duan=1;
duan=0;
wei=1;
P0=0xfb;
wei=0;
delay (10);
}
delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=200;b>0;b--);
}
|