第六集 I/O输入输出
本帖最后由 nzzxqbml 于 2024-12-1 21:27 编辑催更!催更!催更!每次都会催更,一两集根本不够学,冲哥赶紧录,驴歇了冲哥也不许歇{:lol:}
本节学习了I/O输入输出,包括if else,while判断语句、函数定义和调用等软件知识,还学习了电平抖动、高低电平的硬件知识//第6集 I/O输入输出
// note:
//|=或等于:不会覆盖最初的
//换行\r\n
//#define printf printf_hid
//define 替换名 被替换名
//*fmt格式控制字符串
//调用头文件
#include "ai8051u.h"
#include "stc32_stc8_usb.h"
#include "intrins.h"
//宏定义,定义8位无符号变量(0-255)
define u8 unsigned char
//定义16位无符号变量(0-65536)
//define u16 unsigned int
//定义一个变量,用于记录状态,初始状态为0;
u8 state = 0;
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
CHAR *USER_STCISPCMD = "@STCISP#";
//24.000MHZ延时20ms
void Delay20ms(void)
{
unsigned long edata i;
_nop_();
_nop_();
i = 119998UL;
while (i) i--;
}
void main(void)
{
//功能脚切换控制,B7位代表EAXFR,1代表能访问,1000 0000转换成十六进制为80
// P_SW2 |= 0x80;
//设置程序指令延时参数,赋值为0可将cpu执行指令的速度设置为最快
WTST = 0;
// 扩展寄存器(XFR)访问使能
EAXFR= 1;
// 提高访问XRAM的速度
CKCON = 0;
// P0端口为准双向口
P0M0 = 0x00;
P0M1 = 0x00;
// P4端口为准双向口
P4M0 = 0x00;
P4M1 = 0x00;
// 所有口设置为准双向口
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
// USB DC接口初始化
usb_init();
// 使能USB中断
IE2 |= 0x80;
// 打开总开关
EA = 1;
// 打开P40,8颗灯的开关,
P40 = 0;
// 等待USB完成配置
while(DeviceState != DEVSTATE_CONFIGURED);
while(1)
{
if(bUsbOutReady)
{
// 发送数据缓冲区,长度
// USB_SendData(UsbOutBuffer,OutNumber);
usb_OUT_done();
}
// task1:按下P32按钮灯亮,松开P32按钮灯灭
// 判断p32按钮是否按下
if(P32 == 0)
{
P00 = 0;
}
else
{
P00 = 1;
}
// task2:按下P32按钮灯灭,松开P32按钮灯亮
// 判断p32按钮是否按下
if(P32 == 1)
{
P00 = 0;
}
else
{
P00 = 1;
}
// task3:按下P32按钮灯亮,再按一下P32灯灭,以此循环
// if(P32 == 0)
// {
// state取反后赋值给state
// state = !state
// P00 = state;
// 等待P32松开
// while(P32 == 0);
// }
// task3:按下P32按钮灯亮,再按一下P32灯灭,以此循环
if(P32 == 0)
{
// 调用函数延迟20ms,消除抖动
Delay20ms();
if(P32 == 0)
{
state = !state
P00 = state;
printf("state:%d\r\n",(int)state);
// 等待P32松开
while (P32 == 0)
}
}
else
{
P00 = 1;
}
// P40、P00、P01端口输出为0V
P40 = 0;
P00 = 0;
P01 = 0;
}
}
合并吗
页:
[1]