求各位大佬指点一下,想要加个数码管显示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;//几率---------
- }
复制代码 |