//以秒为单位计时,最大值9999
#include"AT89x52.h" #include"intrins.h" #include"math.h" #define uint unsigned int #define uchar unsigned char
sbit DUAN=P2^0; //74HC573的LE端 U5 LED的段选端 sbit WEI=P2^1; //74HC573的LE端 U4 LED的位选端 uchar Temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴显示字库 uint DATA;
//=函数原型:init //=功 能:初始化 //=参 数: //=返 回 值: //=函数性质:私有函数 void init(void) { TMOD=0x01; TCON=0x10; TH0=(65536-500)/256; TL0=(65536-500)%256; IE=0x82; }
void wei_1(uchar wei) { WEI=1; P0=wei; WEI=0; }
void duan_1(uchar duan) { DUAN=1; P0=Temp[duan]; DUAN=0; }
void jishuan(void) { uchar i; uchar ge,shi,bai,qian; init(); while(1) { ge=DATA%1000%100%10;//DATA从何而来? shi=DATA%1000%100/10; bai=DATA%1000/100; qian=DATA/1000; if(DATA<10) { duan_1(ge); wei_1(0xfe); } if(DATA>=10&&DATA<100) { duan_1(ge); wei_1(0xfd); for(i=0;i<100;i++); duan_1(shi); wei_1(0xfe); } if(DATA>=100&&DATA<1000) { duan_1(ge); wei_1(0xfb); for(i=0;i<100;i++); duan_1(shi); wei_1(0xfd); for(i=0;i<100;i++); duan_1(bai); wei_1(0xfe); } if(DATA>=1000) { duan_1(ge); wei_1(0xf7); for(i=0;i<100;i++); duan_1(shi); wei_1(0xfB); for(i=0;i<100;i++); duan_1(bai); wei_1(0xfD); for(i=0;i<100;i++); duan_1(qian); wei_1(0xfe); } for(i=0;i<100;i++); } }
void timer0() interrupt 1 { uint i;//没有赋值语句 if(i++>=1250) //这里的i是哪来得呢? { i=0; if(DATA++>9999)DATA=0;//DATA也是来得莫名其妙 } TH0=(65536-500)/256; TL0=(65536-500)%256; }
main() { jishuan(); } //
程序说明的问题很简单
但是两个变量确怎么也搞不懂,明明没有付初值呀
没有赋值也能直接拿来用? |