跟著教程學習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--);
}
|