十档逻辑笔.hex
//// //// // stc5204-28p; IN=p1.0_adc out= P1.1-P1.7,P2.0-P2.2. /*** 定义头文件 ***/ #include "reg51.h" #include "intrins.h" /*** sfr定义地址不能变 ***/ sfr P1M1 = 0X91; sfr P1M0 = 0X92; sfr P1ASF = 0X9D; //11111111 选P1.0口为ADC功能使能,不位选,只能写, sfr ADC_CONTR = 0XBC; //11111XXX 后三位位P1(0-7)A DC输入信号通道选择, sfr ADC_RES = 0XBD; //为ad转换后结果奇存器SFR地址. /*** 定义常量 #define ***/ #define ADC_POWER 0x80 //CONTR^7 开ADC电源1 #define ADC_FLAG 0x10 //CONTR^6 转换后标志为1 #define ADC_START 0x08 //CONTR^5 开ADC转换=1 #define ADC_SPEED0 0X00 //CONTR^4-3 选转换速度慢00 #define ADC_SPEED1 0X20 //CONTR^4-3 选转换速度中01 #define ADC_SPEED2 0X40 //CONTR^4-3 选转换速度中10 #define ADC_SPEED3 0X60 //CONTR^4-3 选转换速度快11 #define uchar unsigned char;//CONTR^2-0 选ADC输入通道P1.0-7 /*** 定义变量 ***/ uchar dat, key, ch=0XFF/10; //平分10档 /*** 主程序 main ***/ void main(){//P1=P2=0xff; P1M1=P1M0=0x00; 初始化接口// P1ASF=0x01; //选P1.0为ADC使能 ADC_CONTR=0XE8; //开电源1 开转换速度最快11 标志清0 开起动1 端口000(选P1.0) IE=0XA0; //开总中断1, 0, 开ADC中断1, 00000 while(1){ switch(key){ case(1): P1=0XFD; P2=0XFF; break; // case(2): P1=0XFB; P2=0XFF; break; // case(3): P1=0XF7; P2=0XFF; break; // case(4): P1=0XEF; P2=0XFF; break; // case(5): P1=0XDF; P2=0XFF; break; // case(6): P1=0XBF; P2=0XFF; break; // case(7): P1=0X7F; P2=0XFF; break; // case(8): P1=0XFF; P2=0XFE; break; // case(9): P1=0XFF; P2=0XFD; break; // case(10): P1=0XFF; P2=0XFB; break; // default: P1=0XFE;P2=0XFF; break; }} } /***中断响应5********/ void ADC_ISR()interrupt 5 using 1 { dat= ADC_RES; //读AD结果 ADC_CONTR=0xE8; // if( dat=ch*1 && dat=ch*2 && dat=ch*3 && dat=ch*4 && dat=ch*5 && dat=ch*6 && dat=ch*7 && dat=ch*8 && dat=ch*9 )key=10; } DC输入信号通道选择, sfr ADC_RES = 0XBD; //为ad转换后结果奇存器SFR地址. /*** 定义常量 #define ***/ #define ADC_POWER 0x80 //CONTR^7 开ADC电源1 #define ADC_FLAG 0x10 //CONTR^6 转换后标志为1 #define ADC_START 0x08 //CONTR^5 开ADC转换=1 #define ADC_SPEED0 0X00 //CONTR^4-3 选转换速度慢00 #define ADC_SPEED1 0X20 //CONTR^4-3 选转换速度中01 #define ADC_SPEED2 0X40 //CONTR^4-3 选转换速度中10 #define ADC_SPEED3 0X60 //CONTR^4-3 选转换速度快11 #define uchar unsigned char;//CONTR^2-0 选ADC输入通道P1.0-7 /*** 定义变量 ***/ uchar dat, key, ch=0XFF/10; //平分10档 /*** 主程序 main ***/ void main(){//P1=P2=0xff; P1M1=P1M0=0x00; 初始化接口// P1ASF=0x01; //选P1.0为ADC使能 ADC_CONTR=0XE8; //开电源1 开转换速度最快11 标志清0 开起动1 端口000(选P1.0) IE=0XA0; //开总中断1, 0, 开ADC中断1, 00000 while(1){ switch(key){ case(1): P1=0XFD; P2=0XFF; break; // case(2): P1=0XFB; P2=0XFF; break; // case(3): P1=0XF7; P2=0XFF; break; // case(4): P1=0XEF; P2=0XFF; break; // case(5): P1=0XDF; P2=0XFF; break; // case(6): P1=0XBF; P2=0XFF; break; // case(7): P1=0X7F; P2=0XFF; break; // case(8): P1=0XFF; P2=0XFE; break; // case(9): P1=0XFF; P2=0XFD; break; // case(10): P1=0XFF; P2=0XFB; break; // default: P1=0XFE;P2=0XFF; break; }} } /***中断响应5********/ void ADC_ISR()interrupt 5 using 1 { dat= ADC_RES; //读AD结果 ADC_CONTR=0xE8; // if( dat=ch*1 && dat=ch*2 && dat=ch*3 && dat=ch*4 && dat=ch*5 && dat=ch*6 && dat=ch*7 && dat=ch*8 && dat=ch*9 )key=10; }
用户评论