高级会员
- 积分
- 797
- 金钱
- 797
- 注册时间
- 2017-5-21
- 在线时间
- 340 小时
|
今天给大家介绍一下STC51单片机的IO独立配置。
平常我们的IO端口配置都是放在MIAN函数中或独立放置于各个模块中,最近做项目发现在进行程序修改和模块中的IO重新配置时一个个的文件去查找和修改觉得特别麻烦,所以就把所有模块进行重新修订,把IO配置独立于模块,使模块移植起来更方便快捷些。
进入正题:以下是一个温度和水位控制并进行数码管显示的IO配置。
IO.H
/*
配置单片机IO
将单片机的IO按自己的需求和名称进行重新定义
如此可以使各个模块统一调用
端口 序号
7 6 5 4 3 2 1 0
1 推挽 推挽 准双向 准双向 推挽 高阻 开漏 准双向
2
3 准双向 准双向 准双向 准双向 推挽 高阻 推挽 推挽
4
5 高阻 高阻 推挽 准双向 高阻 高阻 高阻 高阻
P1M0 =0xCA;
P1M1 =0x06;
P3M0 =0x0B;
P3M1 =0x04;
P5M0 =0x20;
P5M1 =0xCF;
//使用芯片:STC15W413AS SOP20
*/
#ifndef __IO_H
#define __IO_H
//#include "config.h"
//led显示IO定义
//位码
sbit led_wei_1=P1^3; //第1位数字 PP
sbit led_wei_2=P1^6; //第2位数字 PP
sbit led_wei_3=P1^7; //第3位数字 PP
sbit led_wei_4=P3^3; //第4位数字 PP
//段码
sbit led_point=P3^6; //小数点 STD
sbit led_duan_1=P1^0; // STD
sbit led_duan_2=P1^4; // STD
sbit led_duan_3=P1^5; // STD
sbit led_duan_4=P3^4; // STD
sbit led_duan_5=P3^5; // STD
sbit led_duan_6=P3^7; // STD
sbit led_duan_7=P5^4; // STD
//18B20温度检测IO定义 OD
sbit DQ=P1^1; //QD,检测温度
//水位检测IO定义
sbit ShuiWei_low=P1^2; //下水位 HR
sbit ShuiWei_high=P3^2; //上水位 HR
//电磁阀IO定义 STD
sbit diancifa=P5^5;
//报警信号 PP
sbit baojin=P3^0;
//水泵信号 PP
sbit beng=P3^1;
//extern bit pp_off=0,pp_on=1,std_on=0,std_off=1,od_off=0,od_on=1;
extern bit pp_off,pp_on,std_on,std_off,od_off,od_on,hr_on,hr_off,flag_off,flag_on;
void io_mode(void);
#endif
在上面的H文件中主要是对IO进行重新定义,由于51单片机不能将IO直接做为参数传递,我们通过重新定义用函数调用来达到值传递的目的。
IO.C
/*
配置单片机IO
将单片机的IO按自己的需求和名称进行重新定义
如此可以使各个模块统一调用
端口 序号
7 6 5 4 3 2 1 0
1 推挽 推挽 准双向 准双向 推挽 高阻 开漏 准双向
2
3 准双向 准双向 准双向 准双向 推挽 高阻 推挽 推挽
4
5 高阻 高阻 推挽 准双向 高阻 高阻 高阻 高阻
P1M0 =0xCA;
P1M1 =0x06;
P3M0 =0x0B;
P3M1 =0x04;
P5M0 =0x20;
P5M1 =0xCF;
//使用芯片:STC15W413AS SOP20
*/
#include "io.h" //IO引脚定义
bit pp_off=0,pp_on=1;
bit std_on=0,std_off=1;
bit od_off=0,od_on=1;
bit hr_on=0,hr_off=1;
bit flag_off=0,flag_on=1;
void io_mode(void)
{
//IO模式初始化
P1M0 =0xCA;
P1M1 =0x06;
P3M0 =0x0B;
P3M1 =0x04;
P5M0 =0x20;
P5M1 =0xCF;
//位码输出关闭,如此实现关闭显示
led_wei_1=pp_off; //第1位数字 PP 关闭
led_wei_2=pp_off; //第2位数字 PP 关闭
led_wei_3=pp_off; //第3位数字 PP 关闭
led_wei_4=pp_off; //第4位数字 PP 关闭
}
51单片机程序中最混乱的是各种端口直接读写0和1,如果IO比较多,你看着看着就不知道一个P3^3=0是什么意思了。IO.C就对IO初始化配置包括IO的输入输出模式及各模式下的0是什么意思,1是什么意思进行了重新定义。方便我们写程序和看程序时一眼就清楚程序所要表达的意思。
由于时间的关系,今天就写这么多了,下次写个IO配置中的输入输出模式设置P1M0 =0xCA1M1 =0x06;对应的含义及怎样快速配置IO输入输出模式。
|
|