io口控制实验c语言程序,单片机stc12系列用一个io口连接16个按键c语言程序怎么写?...

匿名用户

1级

2011-08-01 回答

用AD转,16个电阻串联在一起,每个节点引出线与按键相连,按键另一端为公共端与P1^n相连。然后AD口采集到的电压也不同,就能判别按的是哪个按键,因此只要写AD采样程序就可以了

这是STC12C2052AD的例子

/**********************************************************

AD转换

**********************************************************/

void InitADC()

{

P1=0xff;

ADC_CONTR|=0x80;

delayNOP(200);

P1M0=0x01;//这两个寄存器用来设置 P1口四种状态,每一位对应一个P1引脚 ,按状态组合操作

P1M1=0x01;//设置P1.0为开漏状态

delayNOP(200);

}

uint ADC()

{

ADC_DATA = 0; //清除结果

ADC_CONTR = 0x60; //转换速度设置 0x60 最快速度

ADC_CONTR = 0xE0; //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位

ADC_CONTR =0xe0;

delayNOP(200); //使输入电压达到稳定

ADC_CONTR = 0xe8; //1110,1000 令 ADCS = 1, 启动A/D转换,

while (1) //等待A/D转换结束

{

if (ADC_CONTR & 0x10) //0001,0000 测试A/D转换结束否

{ break; }

}

ADC_CONTR =0xe0; //1110,0111 清 ADC_FLAG 位, 关闭A/D转换,

delayNOP(400);

return ADC_DATA; //返回 A/D 10 位转换结果

}

void ADC_to_key() //ADC数据转换按键信号

{

V=ADC();

。。。

。。。

。。。你自己完成咯

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值