這個程序的本意是輸出一個矩陣波,但是如果用單片機實驗板來運行的話就會發(fā)現(xiàn)似乎P1^1(即為第二個led管一直在發(fā)光),其實并不是程序有問題使得它一直在亮,而使通段的頻率對人眼睛來說太快了,根據(jù)視覺暫留,所以會覺得led一直在亮。我開始也是有此懷疑的,可以在程序里面修改使得通段的頻率變低,就可以看出來其實是一直在工作的。在注釋符號后面的程序就是更改后的;
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1^1; //uint i=0;
void main()
{
TMOD=0x01;
TH0=(65536-50000)%256;
TL0=(65536-5000)/256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
while(TF0==0) //if(TF0==0) i++;
{ //if(i==10)
D1=~D1; //{ D1=~D1; }
}
}
}
void timer0() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-50000)%256;
}
更改后的程序變成了但計時器溢出十次,中斷運行,即二十個溢出為此矩陣波的一個周期。