仿真整體圖如下:

這是我用洞洞板與腐蝕板制作的樣品,僅供參考
以下是Keil 4 編寫的源程序
- /************頭文件*********/
- #include<reg51.h>
- #include<absacc.h>
- #include <intrins.h>
- /********自定義變量********/
- #define uint unsigned int //自定義變量
- #define uchar unsigned char
- char gw,sw,bw,qw;
- uchar j; //定時次數,每次20ms
- uchar f=5; //計數的次數
- sbit P10=P1^0; //PWM輸出波形1
- sbit P11=P1^1; //PWM輸出波形2
- sbit P12=P1^2; //正反轉
- sbit P13=P1^3; //加速
- sbit P14=P1^4; //減速
- sbit P15=P1^5; //停止
- sbit P16=P1^6; //啟動
- uchar k;
- uchar t; //脈沖加減
- /**************************/*
- /*********控制位定義********************/
- uchar code smg[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x73,0x71};//程序存儲區定義字型碼表
- char data led[4]={0x08,0x04,0x02,0x01}; //位碼
- uint x; //數碼管顯示的數值
- display(); //數碼管顯示
- delays(); //延時函數
- key();
- displays();
- /*****************************************/
-
- /***************主函數********************/
- main (void)
- {
- TMOD=0x51; //T0方式1 定時計數T1方式1計數
- TH0=0xb1; //裝入初值 20MS
- TL0=0xe0;
- TH1=0x00; // 計數567
- TL1=0x00;
- TR0=1; //啟動 t0
- TR1=1; //啟動t1
- gw=sw=bw=qw=0; //數碼管初始化
- P0=0xc0;
- P2=1;
- while(1) //無限循環
- {
- display(); //數碼管顯示
- key();
-
- }
- }
- /*****************************************/
-
- /***************數碼管顯示****************/
- display()
- {
- uchar i;
- gw=x%10; //求速度個位值,送到個位顯示緩沖區
- sw=(x/10)%10; //求速度十位值,送到十位顯示緩沖區
- bw=(x/100)%10; //求速度百位值,送到百位顯示緩沖區
- qw=x/1000; //求速度千位值,送到千位顯示緩沖區
- for(i=0;i<4;)
- {
- P2=led[i];
- if(i==0) //顯示個位
- {
- P0=smg[gw];
- delays();
- }
- else if(i==1) //顯示十位
- {
- P0=smg[sw];
- delays();
- }
- else if(i==2) //顯示百位
- {
- P0=smg[bw];
- delays();
- }
- else if(i==3) //顯示千位
- {
- if(k==0)//正轉時顯示"三"
- {
- P0=0x49;
- delays();
- }
- else
- {
- P0=0x71; //反轉時顯示"F"
- }
- }
- i++;
- }
- }
- /*******************************************************/
-
- /*****************延時函數*************************/
- delays()
- {
- uchar i;
- for(i=5000;i>0;i--);
- }
- /************************************************/
-
- /*********t0定時*中斷函數*************/
- void t0() interrupt 1 using 2
- {
- TH0=0xb1; //重裝t0
- TL0=0xe0;
- f--;
- if(k==0)
- {
- if(f<t)
- P10=1;
- else
- P10=0;
- P11=0;
- }
- else
- {
- if(f<t)
- P11=1;
- else
- P11=0;
- P10=0;
- }
- if(f==0)
- {
- f=5;
- }
- j++;
- if(j==50)
- {
- j=0;
- x=TH1*256+TL1; //t1方式1計數,讀入計數值
- TH1=0x00;
- TL1=0x00;
- x++;
- display();
- }
- }
- /****************按鍵掃描**************/
- key()
- {
- if(P12==0) //如果按下,
- {
- while(!P12) //去抖動
- display();
- k=~k;
- }
- if(P16==0) //啟動
- {
- while(P16==0);
- IE=0x8a;
- }
- if(P13==0) //加速
- {
- while (P13==0);
- t++;
- }
- if(t>=5)
- t=5;
- if(P14==0) //減速
- {
- while(P14==0);
- t--;
- }
- if(t<1)
- t=1;
- if(P15==0) //停止
- {
- while(P15==0);
-
- EA=0;
- P10=0;
- P11=0;
- }
- }
- /******************************************************/
復制代碼
|