|
該程序能檢測(cè)處理后的三相電源信號(hào),希望有所幫助。
單片機(jī)源程序如下:
- #include<reg52.h>
- unsigned long fre;
- unsigned char time;
- unsigned int count;
- unsigned char led[6];
- unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f}; //數(shù)碼管0123456789顯示
- sbit swan=P2^0;
- sbit wan =P2^1;
- sbit qian=P2^2;
- sbit bai =P2^3;
- sbit shi =P2^4;
- sbit ge=P2^5;
- sbit ppp= P0^0 ;
- void timer_init(); //函數(shù)聲明
- void display(unsigned long num);
- void delay(unsigned int a);
-
- void main()
- {
- // timer_init(); //定時(shí)/計(jì)數(shù)器初始化
- while(1)
- { //display(fre); //數(shù)碼管顯示
- P2 = 0x75;
- P0 = 0x35;
- }
- }
-
- void delay(unsigned int a) //延時(shí)約1ms(12Mhz晶振)
- {
- unsigned char i;
- while(a--!=0)
- for(i=125;i>0;i--);
- }
- void display(unsigned long num) //顯示函數(shù)
- {unsigned char sw,w,q,b,s,g;
- P0 = 0x75;
- //sw=num/100000;P0=table[sw];swan=0;delay(2);swan=1;
- //w=num/10000%10;P0=table[w];wan=0;delay(2);wan=1;
- //q=num/1000%10;P0=table[q];qian=0;delay(2);qian=1;
- //b=num%1000/100;P0=table[b];bai=0;delay(2);bai=1;
- //s=num%100/10;P0=table[s];shi=0;delay(2);shi=1;
- //g=num%10;P0=table[g];ge=0;delay(2);ge=1;
- }
- void timer_init(void) //定時(shí)/計(jì)數(shù)器初始化
- { TMOD=0x06; //計(jì)數(shù)器0工作工作方式2,自動(dòng)重裝初值
- TH0=0; //計(jì)數(shù)器初值為0
- TL0=0;
- TR0=1; //計(jì)數(shù)器開始計(jì)數(shù)
- ET0=1; //打開計(jì)數(shù)器0中斷
- RCAP2H=(65536-62500)/256; //在程序初始化時(shí)給RCAP2L和RCAP2H賦值
- RCAP2L=(65536-62500)%256; //TH2 和 TL2 將會(huì)在中斷產(chǎn)生時(shí)自動(dòng)使 TH2=RCAP2H,TL2=RCAP2L。
- TH2=RCAP2H; //12M晶振下每次中斷62.5ms
- TL2=RCAP2L;
- ET2=1; //打開定時(shí)器2中斷
- TR2=1; //定時(shí)器2開始計(jì)時(shí)
- EA=1; //開總中斷
- }
- void timer2(void) interrupt 5 //定時(shí)器2中斷(62.5ms)
- {
- time++;
- TF2=0;//定時(shí)器2的中斷標(biāo)志位TF2不能夠由硬件清零,所以要在中斷服務(wù)序中將其清零
- if (time==16) //定時(shí)1s時(shí)間到
- {
- time=0; //計(jì)時(shí)清0
- EA=0; //關(guān)中斷
- fre=7;
- //fre=(long)count*256+TL0; //count*256強(qiáng)制轉(zhuǎn)換成long型,否則將不產(chǎn)生進(jìn)位
- TL0=0; //清零計(jì)數(shù)器0計(jì)數(shù)
- TH0=0;
- count=0; //清零計(jì)數(shù)器0計(jì)數(shù)
- EA=1; //開始中斷
- }
- }
- void timer0(void)interrupt 1//計(jì)數(shù)器0中斷
- {
- count++;
- }
復(fù)制代碼
|
|