找回密码
 立即注册
查看: 212|回复: 2

第六集 I/O输入输出

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-22 15:04:57
已绑定手机

7

主题

2

回帖

47

积分

新手上路

积分
47
发表于 2024-12-1 21:26:14 | 显示全部楼层 |阅读模式
本帖最后由 nzzxqbml 于 2024-12-1 21:27 编辑

催更!催更!催更!每次都会催更,一两集根本不够学,冲哥赶紧录,驴歇了冲哥也不许歇
本节学习了I/O输入输出,包括if else,while判断语句、函数定义和调用等软件知识,还学习了电平抖动、高低电平的硬件知识
  1. //第6集 I/O输入输出
  2. // note:
  3. //|=或等于:不会覆盖最初的
  4. //换行\r\n
  5. //#define printf printf_hid
  6. //define 替换名 被替换名
  7. //*fmt格式控制字符串
  8. //调用头文件
  9. #include "ai8051u.h"
  10. #include "stc32_stc8_usb.h"
  11. #include "intrins.h"
  12. //宏定义,定义8位无符号变量(0-255)
  13. define u8 unsigned char
  14. //定义16位无符号变量(0-65536)
  15. //define u16 unsigned int
  16. //定义一个变量,用于记录状态,初始状态为0;
  17. u8 state = 0;
  18. char *USER_DEVICEDESC = NULL;
  19. char *USER_PRODUCTDESC = NULL;
  20. CHAR *USER_STCISPCMD = "@STCISP#";
  21. //24.000MHZ延时20ms
  22. void Delay20ms(void)
  23. {
  24.     unsigned long edata i;
  25.     _nop_();
  26.     _nop_();
  27.     i = 119998UL;
  28.     while (i) i--;
  29. }
  30. void main(void)
  31. {
  32. //功能脚切换控制,B7位代表EAXFR,1代表能访问,1000 0000转换成十六进制为80
  33. //    P_SW2 |= 0x80;
  34. //设置程序指令延时参数,赋值为0可将cpu执行指令的速度设置为最快
  35.     WTST = 0;
  36. //    扩展寄存器(XFR)访问使能
  37.     EAXFR  = 1;
  38. //    提高访问XRAM的速度
  39.     CKCON = 0;
  40. //    P0端口为准双向口
  41.     P0M0 = 0x00;
  42.     P0M1 = 0x00;
  43. //    P4端口为准双向口
  44.     P4M0 = 0x00;
  45.     P4M1 = 0x00;
  46. //    所有口设置为准双向口
  47.     P1M0 = 0x00;
  48.     P1M1 = 0x00;
  49.     P2M0 = 0x00;
  50.     P2M1 = 0x00;
  51.     P3M0 = 0x00;
  52.     P3M1 = 0x00;
  53.     P5M0 = 0x00;
  54.     P5M1 = 0x00;
  55.     P6M0 = 0x00;
  56.     P6M1 = 0x00;
  57.     P7M0 = 0x00;
  58.     P7M1 = 0x00;
  59. //    USB DC接口初始化
  60.     usb_init();
  61. //    使能USB中断
  62.     IE2 |= 0x80;
  63. //    打开总开关
  64.     EA = 1;
  65. //    打开P40,8颗灯的开关,
  66.     P40 = 0;
  67. //    等待USB完成配置
  68.     while(DeviceState != DEVSTATE_CONFIGURED);
  69.     while(1)
  70.     {
  71.         if(bUsbOutReady)
  72.         {
  73. //            发送数据缓冲区,长度
  74. //            USB_SendData(UsbOutBuffer,OutNumber);
  75.             usb_OUT_done();
  76.         }
  77. //        task1:按下P32按钮灯亮,松开P32按钮灯灭
  78. //      判断p32按钮是否按下
  79.         if(P32 == 0)
  80.         {
  81.             P00 = 0;
  82.         }
  83.         else
  84.         {
  85.             P00 = 1;
  86.         }
  87. //        task2:按下P32按钮灯灭,松开P32按钮灯亮
  88. //      判断p32按钮是否按下
  89.         if(P32 == 1)
  90.         {
  91.             P00 = 0;
  92.         }
  93.         else
  94.         {
  95.             P00 = 1;
  96.         }
  97. //        task3:按下P32按钮灯亮,再按一下P32灯灭,以此循环
  98. //        if(P32 == 0)
  99. //        {
  100. //            state取反后赋值给state
  101. //            state = !state
  102. //            P00 = state;
  103. //          等待P32松开
  104. //            while(P32 == 0);
  105. //        }
  106. //        task3:按下P32按钮灯亮,再按一下P32灯灭,以此循环
  107.         if(P32 == 0)
  108.         {
  109. //            调用函数延迟20ms,消除抖动
  110.             Delay20ms();
  111.             if(P32 == 0)
  112.             {
  113.                 state = !state
  114.                 P00 = state;
  115.                 printf("state:%d\r\n",(int)state);
  116. //              等待P32松开
  117.                 while (P32 == 0)
  118.             }
  119.         }
  120.         else
  121.         {
  122.             P00 = 1;
  123.         }
  124. //        P40、P00、P01端口输出为0V
  125.         P40 = 0;
  126.         P00 = 0;
  127.         P01 = 0;
  128.     }
  129. }
复制代码

学习笔记

学习笔记

点评

打卡 放在同一个帖子里 其他的删掉 以便于我们这边审核 谢谢您  发表于 2024-12-2 08:55
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-22 15:04:57
已绑定手机

7

主题

2

回帖

47

积分

新手上路

积分
47
发表于 2024-12-2 15:16:29 | 显示全部楼层
合并吗
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 03:33 , Processed in 0.122226 second(s), 55 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表