1.外设控制函数模块
先给p0赋值,再选择打开对应的锁存器,再关闭锁存器,使值稳定。
#include <STC15F2K60S2.H>
//外设控制函数
void vDevice_Ctrl(unsigned char p2data,unsigned char p0data)
{
P0 = p0data;
P2 = p2data;
P2 = 0;
}
2.共用体赋值法
description:1.定义一个bits的结构体数据类型。
2.定义一个HexToBin的共用体数据类型。
3.对led_ctrl.hex赋值一个字节的数据,对应的b0——b7也会变化。
4.对led_ctrl.b.b0进行位赋值,对应的led_ctrl.hex也会对应变化。
共用体模块:
#ifndef __SYSTEM_H__
#define __SYSTEM_H__
typedef char s8;
typedef unsigned char u8;
typedef int s16;
typedef unsigned int u16;
typedef unsigned long u32;
//用typedef定义一个叫bits的结构体数据类型,从而可以用bits b;定义b为结构体的变量
typedef struct
{
unsigned char b0: 1;
unsigned char b1: 1;
unsigned char b2: 1;
unsigned char b3: 1;
unsigned char b4: 1;
unsigned char b5: 1;
unsigned char b6: 1;
unsigned char b7: 1;
}bits;
//用typedef定义一个叫HexToBin的共用体数据类型,从而可以用HexToBin led_ctrl;定义led_ctrl为共用体的变量
typedef union
{
unsigned char hex;
bits b;
}HexToBin;
#endif
3.示例:
通过对共用体变量赋值,完成控制led亮灭,打开/关闭蜂鸣器、继电器操作。
相关电路分析在led和蜂鸣器继电器中已经有了详细的分析,此处不再赘述。
#include <STC15F2K60S2.H>
#include <intrins.h>
#include "Delay.h"
#include "Device.h"
#include "system.h"
HexToBin led_ctrl,buzzer_ctrl;
//初始化函数
void vSystem_Init(void)
{
vDevice_Ctrl(0xa0,0); //关闭蜂鸣器和继电器
}
void main(void)
{
vSystem_Init();
led_ctrl.hex = 0x55; //进行字节赋值,希望L2,L4,L6,L8点亮
vDevice_Ctrl(0x80,led_ctrl.hex); //选通Y4c锁存器,并在p0口输出一个字节数据,完成点亮操作
buzzer_ctrl.b.b4 = 1; //进行位赋值,希望吸合继电器
vDevice_Ctrl(0xa0,buzzer_ctrl.hex); //选通Y5c锁存器,并在P0口输出一个字节数据,完成吸合操作
while(1)
{
led_ctrl.b.b1 = 1; //对led进行位赋值,希望熄灭L2
vDevice_Ctrl(0x80,led_ctrl.hex); //选通Y4c锁存器,并在p0口输出一个字节数据,完成熄灭操作
Delay_ms(200);
led_ctrl.b.b1 = 0; //对led进行位赋值,希望点亮L2
vDevice_Ctrl(0x80,led_ctrl.hex); //选通Y4c锁存器,并在p0口输出一个字节数据,完成点亮操作
Delay_ms(200);
}
}