//以秒為單位計時,最大值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(); } //
程序說明的問題很簡單
但是兩個變量確怎么也搞不懂,明明沒有付初值呀
沒有賦值也能直接拿來用? |