文件名称:十档逻辑笔.hex
文件大小:3KB
文件格式:HEX
更新时间:2014-09-12 14:46:30
十档逻辑笔.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)ADC输入信号通道选择,
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