nzzxqbml 发表于 2024-12-1 21:26:14

第六集 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;
    }
}



nzzxqbml 发表于 2024-12-2 15:16:29

合并吗
页: [1]
查看完整版本: 第六集 I/O输入输出