|
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- code tabup[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
- code tabdowm[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
- void delay(uint z);
- int i;
- sbit S2=P3^0;
- sbit S3=P3^1;
- sbit S4=P3^2;
- keyval=0;
- void moveup() //正轉(zhuǎn)
- {
- for(i=0;i<8;i++)
- {
- P1=tabup[i];
- delay(1);
- }
- }
- void movedowm() //反轉(zhuǎn)
- {
- for(i=0;i<8;i++)
- {
- P1=tabdowm[i];
- delay(1);
- }
- }
- void delay (uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void stop()
- {
- P1=0xff;
- }
- void main(void)
- {
- TMOD=0x01; //使用定時(shí)器T0的模式1
- TR0=0; //給定時(shí)器T0賦初值并關(guān)閉T0
- TH0=(65536-500)/256; //定時(shí)器TH0賦初值為500
- TL0=(65536-500)%256; //定時(shí)器TL0賦初值為500
- EA=1; //開總中斷
- ET0=1; //定時(shí)器T0中斷允許
- TR0=1; //啟動(dòng)定時(shí)器T0,這里必須要啟動(dòng),因?yàn)榇笱h(huán)里
- while(1) //要給keyval賦值,而賦值語句在中斷服務(wù)函數(shù)里
- {
- switch(keyval) //根據(jù)按鍵值keyval選擇待執(zhí)行的功能
- {
- case 1:moveup(); break; //按鍵S1按下,正轉(zhuǎn)
- case 2:movedowm(); break; //按鍵S2按下,反轉(zhuǎn)
- case 3:stop(); break; //按鍵S3按下,停轉(zhuǎn)
- }
- }
- }
- /*************************************************
- 函數(shù)功能:定時(shí)器T0的中斷服務(wù)子程序
- **************************************************/
- void Time0_serve(void) interrupt 1
- {
- TH0=(65536-200)/256; //定時(shí)器T0的高8位賦初值
- TL0=(65536-200)%256; //定時(shí)器T0的低8位賦初值
- if((P3&0xff)!=0xff) //檢測是否有按鍵按下
- {
- delay(50); //延時(shí)一段時(shí)間再去檢測
- if((P3&0xff)!=0xff) //再次檢測是否確實(shí)有按鍵按下
- {
- if(S2==0) //按鍵S1被按下
- keyval=1; //給keyval賦值
- if(S3==0) //按鍵S2被按下
- keyval=2; //給keyval賦值
- if(S4==0) //按鍵S3被按下
- keyval=3; //給keyval賦值
- }
- }
- }
復(fù)制代碼 |
|