求各位大佬指點一下,想要加個數碼管顯示0-A檔位,但是單機片用的是STC15W408AS 16引腳的,P1口只有6個引腳,不知道怎么辦
- #include<reg52.h> //代入頭文件//
- #include <intrins.h> // 用空操作 _nop_ 時要加這句//
- #define ulong unsigned long //宏定義變量類型 0----4294967295/
- #define uint unsigned int //宏定義變量類型 0----65535/
- #define uchar unsigned char// 宏定義變量類型 0-255/
- uchar jlu; //幾率-----------------=======
-
- uint t00,b00,t01,b01; //X0輸入濾波變量
-
- uint t10,b10,t11,b11; //X1輸入濾波變量
- uint t20,b20,t21,b21; //X2輸入濾波變量
- uint b,k1,ks,b1,k2,ty,t3,b3,k3; //標志量
-
- uint t0,t2;//長按加減鍵0.7秒也會變一檔或停
- uint lbcs=5; //0--65535,輸入濾波常數,可以為5到10毫秒,長按用300到700毫秒,一改全改。
- sfr P3M1=0xB1; //A//
- sfr P3M0=0xB2; //B//P3口特殊寄存器聲明 sfr P3M1=0xb1; sfr P3M0=0xb2; B可用小寫b嗎?
- // P3M1=0x0; //C//
- // P3M0=0x4; // D// 3.2腳為推挽輸出,其他是準雙向口,這兩句放在主程序里
- // 如果全是準雙向口,上面ABCD4句可以不要
-
- //// 3個輸入如下
- sbit X0=P3^3; //減速 D0
- sbit X1=P3^6; //停(點焊) D1
- sbit X2=P3^7; //加速 D2
-
-
-
-
- sbit Y0=P3^2; //1輸出
- void main( )//主程序
- {
- TMOD=0x01; // TMOD=0x11;//設置定時器0為工作方式1//
- TH0=(65536-1000)/256; //12MHZ,1MS一次中斷,商//
- TL0=(65536-1000)%256; //低四位裝數=余數//
-
- EA=1; //開總中斷//
- ET0=1; //開定時器0中斷
- TR0=1;//啟動定時器0//397//
- // X0=1;//把P3.3 復位腳 RST OUT-LOW 設置為高電平==========????????????????????????
- Y0=0;//出0,停止
- P3M1=0x0;// 高8位為0000 0000
- P3M0=0x4; //低8位為0000 0100 3.2腳為推挽輸出,串聯1K電阻到地,有4毫安電流。其他是準雙向口串聯1K電阻到地只有13微安 ( 寫成 P3M1=0x00; P3M0=0x40;不行,已經驗證了)。
-
- while(1)//大循環
- {
- jlu=0;//幾率------
- //以下是你的編程區=========================================
-
-
- //以下你不要編程=========================================
- while(jlu<1) //幾率-------
-
- {_nop_(); _nop_(); _nop_(); }
-
-
- }
- }
-
-
- void exter0() interrupt 1 //定時器0的中斷程序//定時器1的中斷程序 void exter1() interrupt 3//
- {
- TH0=(65536-1000)/256; //重裝數12MHz 1000=1ms,如果不重裝,默認數是65536,不是想要的10000//
- TL0=(65536-1000)%256;
-
-
- //X0濾波
- if(X0==0) {t00++;t01=0;}
- if(t00==lbcs){b00=1;b01=0; } //b00=1,就是按下
- if(b00==1) t00=0;
- if(X0==1) {t01++;t00=0;}
- if(t01==lbcs){b01=1;b00=0; } //b01=1,就是松手
- if(b01==1) t01=0;
- //X1濾波
- if(X1==0) {t10++;t11=0;}
- if(t10==lbcs){b10=1;b11=0; } //b10=1,就是按下
- if(b10==1) t10=0;
- if(X1==1) {t11++;t10=0;}
- if(t11==lbcs){b11=1;b10=0; } //b11=1,就是松手
- if(b11==1) t11=0;
-
-
- //X2濾波
- if(X2==0) {t20++;t21=0;}
- if(t20==lbcs){b20=1;b21=0; } //b20=1,就是按下
- if(b20==1) t20=0;
- if(X2==1) {t21++;t20=0;}
- if(t21==lbcs){b21=1;b20=0; } //b21=1,就是松手
- if(b21==1) t21=0;
-
-
-
-
- //以下是你的編程區=======================================
- if(b20==1){b=1;k1=0;}
- if(b==1){ if(b21==1)
- {
- b=0;
- k1=1;
- }
-
- }
- if(k1==1){ k1=0;
-
- if(ks<10)ks++;
- }
- //X2 P3.7加檔,用加鍵改變ks值
- if(b00==1){b1=1;k2=0;}
- if(b1==1){ if(b01==1)
- {
- b1=0;
- k2=1;
- }
-
- }
- if(k2==1){ k2=0;
-
- if(ks>0)ks--;
- }
- //X0 P3.3減檔,用減鍵改變ks值
-
- //到這,KS值會運隨加減鍵在0--10范圍變化,以下就根據k值做相應工作
-
-
-
-
-
-
-
- if(ks==1){ //1檔開始 按下按鍵并松手,1秒后通電10ms,實際10-4ms行程=6ms焊接時間
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1010) {Y0=0; //差值為10ms,10-4ms行程=6ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //1檔 //X1 P3.6 停鍵 6ms //1檔結束
-
-
- if(ks==2){ //2檔開始
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1011) {Y0=0; //差值為11ms,11-4ms行程=7ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //2檔 //X1 P3.6 停鍵 7ms //2檔結束
-
-
-
- if(ks==3){ //3檔開始
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1012) {Y0=0; //差值為12ms,12-4ms行程=8ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //3檔 //X1 P3.6 停鍵 8ms //3檔結束
-
-
-
- if(ks==4){ //4檔開始
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1013) {Y0=0; //差值為13ms,13-4ms行程=9ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //4檔 //X1 P3.6 停鍵 8ms //4檔結束
- if(ks==5){ //5檔開始
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1014) {Y0=0; //差值為14ms,14-4ms行程=10ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //5檔 //X1 P3.6 停鍵 10ms //5檔結束
-
- if(ks==6){ //6檔開始
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1015) {Y0=0; //差值為15ms,15-4ms行程=11ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //6檔 //X1 P3.6 停鍵 11ms //6檔結束
- if(ks==7){ //7檔開始
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1016) {Y0=0; //差值為16ms,16-4ms行程=11ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //7檔 //X1 P3.6 停鍵 11ms //7檔結束
- if(ks==8){ //8檔開始
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1017) {Y0=0; //差值為17ms,17-4ms行程=13ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //8檔 //X1 P3.6 停鍵 13ms //8檔結束
- if(ks==9){ //9檔開始
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1018) {Y0=0; //差值為18ms,18-4ms行程=14ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //9檔 //X1 P3.6 停鍵 14ms //9檔結束
-
- if(ks==10){ //10檔開始
- if(b10==1){b3=1;k3=0;}
- if(b3==1){ if(b11==1)
- {
- b3=0;
- k3=1;
- }
- }
- if(k3==1){ t3++;
- if(t3==1000) Y0=1; //延遲1秒
- if(t3==1019) {Y0=0; //差值為19ms,19-4ms行程=15ms焊接時間
- t3=0;
- k3=0;
- }
- }
-
- } //10檔 //X1 P3.6 停鍵 15ms //10檔結束
- //以下你不要編程=========================================
- jlu=1;//幾率---------
- }
復制代碼 |