#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit pwm=P2^1; sbit dula=P2^6; sbit wela=P2^7; uchar num1,num2,a,b,temp,temp1,t0,t1; uchar code table[]={0x3f,0x06,0x5b, 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; void init()/////////程序初始化 { num1=1; temp1=0xfe; P1=temp1; num2=1;
dula=1;////////////數碼管初值顯示 P0=table[0]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0;
TH0=(65536-50000)/256;//////////定時器0和定時器1 TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET0=1; ET1=1; TR0=1; } void timer0() interrupt 1////////////定時器0的工作方式1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++; if(t0==100) { t0=0; } } void timer1() interrupt 3////////////定時器1的工作方式1 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; t1++; } void delay(uchar z)///////////延時函數 { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void input()/////////////鍵盤輸入 { P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xee:num1=1; break; case 0xde:num1=2; break; case 0xbe:num1=3; break; case 0x7e:num1=4; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case 0xed:num1=5; break; case 0xdd:num1=6; break; case 0xbd:num1=7; break; case 0x7d:num1=8; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } } void display1(uchar a)//////////////數碼管顯示 { a=num2; dula=1; P0=table[a]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); } void display2(uchar b)///////數碼管顯示 { b=num1; dula=1; P0=table; dula=0; P0=0xff; wela=1; P0=0xdf; wela=0; delay(1); } void moter_moving()/////////////電機驅動 { if(num1!=num2) { TR1=1; t0=0; if(t0<10) { pwm=1; } if(num1>num2)/////////////上升 { if(t1==200) { temp1=_crol_(temp1,1); P1=temp1; num2++; while(t1==200); t1=0; } } if(num1<num2)//////////////下降 { if(t1==200) { temp1=_cror_(temp1,1); P1=temp1; num2--; P0=_crol_(P0,1); while(t1==200); t1=0; } } } else { pwm=0; TR1=0; } } void main() { init(); while(1) { input(); display1(a); display2(b); moter_moving(); } }
請大家一起來看一下,這里的定時器0和定時器1有沒有正常工作?我覺得定時器0和定時器1是沒有工作的,本來想加上TMOD=0x11的,但是發現加上了以后反而錯誤了,不加的話反而正確。大家給點兒解釋吧。 [upload=c,1-1.c]viewFile.asp?ID=1387[/upload]
|