找回密码
 立即注册
查看: 1524|回复: 14

《8051U深度入门到32位51大型实战教学视频》学习打卡

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2024-12-2 09:45:54 | 显示全部楼层 |阅读模式
第一课:序言。介绍了AI8051U特色功能模块:屏幕显示和视频播放(flash编程器);IIS录放音;PWM_DMA;频谱分析仪(上位机);手写计算器;QSPI、PWM移相、硬件乘除、单精度浮点。支持32位、8位指令集,兼容89C52RC、12C5A60S2。USB直接下载和仿真,全球唯一 12K SRAM, 128K Flash,CAN/Lin,轨到轨比较器,PWM; DMA支持: 12位ADC,4组串口,SPI,I2C,TFT-i8080/M6800 接口
第二课:实验箱介绍。红色电容器用来调节示波器波形。矩阵键盘:行列独立控制,横向4个脚纵向2个脚控制8个键。ADC键盘:1个脚控制16个键。下载安装keil、ISP软件,往实验箱里下载跑马灯程序
第三课:点灯。三极管工作原理。设置IO口模式,二进制写法:P0M0=0000 0000;十六进制写法:P0M0=0x00;编译成功,点灯成功。
截图202412020938395106.jpg
截图202412020938488605.jpg
第四课:不停电下载。有查询模式和中断模式。编译报错,仔细排查后发现是;误打成:
截图202412020944138125.jpg
截图202412020944243265.jpg


AI8051U教学视频第3集点亮第一颗LED学习程序.zip

38.88 KB, 下载次数: 33

AI8051U教学视频第4集USB不停电下载学习程序.zip

2.21 MB, 下载次数: 33

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-04-28 08:49:07
已绑定手机

90

主题

961

回帖

2318

积分

超级版主

积分
2318
QQ
发表于 2024-12-2 10:19:48 | 显示全部楼层
很优秀啊  继续加油
热线19952583534
www.STCAI.com
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2024-12-3 14:01:48 | 显示全部楼层
第五课:C语言基础。不停电下载失败原因:memory model设置选错;未添加library文件。
#define printf printf_hid   //#define 替换名 被替换名  
演示普通字符和转换说明在串口打印输出时的区别。介绍格式字符、转义字符、标志、进制转换、变量类型,想用64位变量,要在程序文件添加申明:#pragma float64
算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、其他运算符
举例说明变量类型不能溢出超过最大范围。已经跟着视频写程序测试成功
截图202412031400511775.jpg 截图202412031401026457.jpg 截图202412031401157342.jpg

AI8051U教学视频第5集C语言基础学习程序.zip

88.04 KB, 下载次数: 33

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2024-12-3 16:57:13 | 显示全部楼层
第六课:IO输入输出。IO口对地电压,最小值-0.3 V,最大值VDD+0.3 V。拉电流灌电流。机械按键按下或者松开有抖动,一般在20ms内,可以用延时20ms去抖动。跟着视频写了3个任务的程序:任务1:按下P32按钮灯亮,松开P32按钮灯灭
截图202412031655273223.jpg 截图202412031655349410.jpg
任务2:按下P32按钮灯灭,松开P32按钮灯亮
截图202412031655529654.jpg 截图202412031655595640.jpg
任务3:按一下灯亮,按一下灯灭
截图202412031656167138.jpg

课后任务1:按一下P32按钮灯亮,按一下P33按钮灯灭
截图202412041541362263.jpg

AI8051U教学视频第6集IO输入输出学习程序.zip

91.3 KB, 下载次数: 30

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2024-12-5 17:16:26 | 显示全部楼层
第七课:定时器中断。定时器作用:计时;替代长时间的延时。串口打印要注意0xfd乱码问题。学习了定时器相关的寄存器,函数的定义声明调用。跟着视频写了3个任务的程序:任务1:LED灯三秒取反一次,这期间任意时刻按下按钮,串口打印按键次数
截图202412051714291638.jpg
任务2:灯按一下点亮三秒后熄灭
截图202412051714449586.jpg
任务3:救护车灯控制器,按下报警按钮,红蓝交替闪烁(LED1和LED2表示红和蓝灯);再按一下报警按钮,红蓝灯停止。
截图202412051715032626.jpg
附件含程序和效果视频


AI8051U教学视频第7集定时器中断学习程序.zip

4.35 MB, 下载次数: 29

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2024-12-9 16:08:52 | 显示全部楼层
第八课:定时器周期性调度任务。一般编译出错原因:大小写,中英文输入法符号错误,漏符号。数组定义和使用,for循环,多任务调度系统。跟着视频写了程序,任务1:用一个定时器实现这个任务。LED1实现0.3秒取反一次,LED2实现0.6秒取反一次,LED30.9秒取反一次

截图202412091603353087.jpg
任务1,数组定义+for循环的写法
截图202412091605149071.jpg
任务2:数组点亮LED,实现流水灯
截图202412091605296307.jpg
任务3:按键1按一下,LED通过数组移动一下
截图202412091605458073.jpg
周期性多任务调度
截图202412091606037209.jpg
附件为程序和效果视频

AI8051U教学视频第8集定时器周期性调度任务学习程序.zip

6.06 MB, 下载次数: 29

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2024-12-12 15:37:23 | 显示全部楼层
第九课:数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。实验箱上是共阴极数码管,型号为3461AS,3461代表尺寸,AS代表单色,BS代表双色。介绍了段码位码,可以在ISP软件里使用数码管段码生成工具,介绍了ISP软件里的虚拟调试接口,方便开发。跟着视频写了程序,任务1:静态显示数字0
截图202412121532259504.jpg 截图202412121532404450.jpg
任务2:数码管显示12345678
截图202412121532529627.jpg 截图202412121533012047.jpg
任务3:数码管显示"00-00-00” 分别代表时分秒,每过1秒钟秒+1
截图202412121533166425.jpg
虚拟显示-LED,P2流水灯效果
截图202412121533388771.jpg 截图202412121534144487.jpg
虚拟显示-数码管,数码管显示"00-00-00” 分别代表时分秒,每过1秒钟秒+1
截图202412121534343944.jpg 截图202412121534429330.jpg
附件含程序和效果视频

AI8051U教学视频第9集shu码管学习程序.zip

2.96 MB, 下载次数: 26

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2024-12-24 16:54:00 | 显示全部楼层
第十课:虚拟LED和数码管。讲解了ISP软件里调试仿真接口的虚拟LED,数码管和键盘。跟着视频写了程序:任务1: P2口流水灯,P10闪烁
截图202412241648443508.jpg 截图202412241648549540.jpg
任务2:左边数码管显示P32按下次数,右边数码管显示P33按下次数
截图202412241649133536.jpg 截图202412241649202122.jpg
任务3:按下数字按键在数码管显示对应的按键数字
截图202412241649396336.jpg
REC_NUM = UsbOutBuffer[5]-48;     
要注意ASCII码表对应值问题
截图202412241652074056.jpg

AI8051U教学视频第10集虚拟LED和shu码管学习程序.zip

154.9 KB, 下载次数: 23

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2024-12-30 10:04:46 | 显示全部楼层
第十一课:矩阵按键
独立按键:一端接单片机引脚,一端接地或电源,一个按键对应一个端口。
矩阵按键:有限端口实现更多按键,按键检测比独立按键慢。
按键识别原理:端口默认为高电平,实时读取到引脚为低电平是表示按下。①第一步:现将P0.0-P0.3输出低电平,P0.6- P0.7输出高电平,如果有按键按下,按下的那一行的IO就会变成低电平,就可以判断出哪一行按下了。②第二步:现将P0.0-P0.3输出高电平,P0.6-P0.7输出低电平,如果有按键按下,按下的那一列的IO就会变成低电平,就可以判断出哪一列按下了。③第三步:行列组合一下就可以判断出是哪个按键按下了。
截图202412300945143165.jpg
跟着视频写了程序:
任务1:数码管显示当前的按键号
  1. #include "io.h"
  2. u8 SEG_NUM[]=
  3. {
  4.         0x3F,       /*'0', 0*/
  5.     0x06,       /*'1', 1*/
  6.     0x5B,       /*'2', 2*/
  7.     0x4F,       /*'3', 3*/
  8.     0x66,       /*'4', 4*/
  9.     0x6D,       /*'5', 5*/
  10.     0x7D,       /*'6', 6*/
  11.     0x07,       /*'7', 7*/
  12.     0x7F,       /*'8', 8*/
  13.     0x6F,       /*'9', 9*/
  14.     0x77,       /*'A', 10*/
  15.     0x7C,       /*'B', 11*/
  16.     0x39,       /*'C', 12*/
  17.     0x5E,       /*'D', 13*/
  18.     0x79,       /*'E', 14*/
  19.     0x71,       /*'F', 15*/
  20.     0x40,       /*'-', 16*/
  21.     0x00,       /*' ', 17*/
  22.     0x80,       /*'.', 18*/
  23. };
  24. u8 T_NUM[8]=
  25. {
  26.         0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80
  27. };
  28. /*
  29.      #define ROW1   P06          //端口定义
  30.      #define ROW2   P07
  31.      #define COL1   P00
  32.      #define COL2   P01
  33.      #define COL3   P02
  34.      #define COL4   P03
  35. */
  36. u8 key_num = 0xff;
  37. //任务1:数码管显示当前的按键号
  38. void Task_1(void)
  39. {
  40.         //①第一步:现将P0.0-P0.3输出低电平,P0.6-P0.7输出高电平,如果有按键按下,按下的那一行的IO就会变成低电平,就可以判断出哪一行按下了。
  41.         COL1 = 0;
  42.         COL2 = 0;
  43.         COL3 = 0;
  44.         COL4 = 0;
  45.         ROW1 = 1;
  46.         ROW2 = 1;
  47.         
  48.         if((ROW1 == 0)||(ROW2 == 0))       //如果行按键有按下
  49.         {
  50.                 if((ROW1 == 0)&&(ROW2 == 0))   //如果两行都有按键按下,不处理
  51.                 {
  52.                         
  53.                 }
  54.                 else if(((ROW1 == 1)&&(ROW2 == 0))||((ROW1 == 0)&&(ROW2 == 1)))       //如果有按键按下,而且只有一颗
  55.                 {
  56.                         if(ROW1 == 0)              //判断哪一行,输出行开始的序号
  57.                                 key_num = 0;
  58.                         else if(ROW2 == 0)
  59.                                 key_num = 4;
  60.                         
  61.                         //②第二步:现将P0.0-P0.3输出高电平,P0.6-P0.7输出低电平,如果有按键按下,按下的那一列的IO就会变成低电平,就可以判断出哪一列按下了。        
  62.                         COL1 = 1;
  63.                 COL2 = 1;
  64.                 COL3 = 1;
  65.                 COL4 = 1;
  66.                 ROW1 = 0;
  67.                 ROW2 = 0;
  68.                         
  69.                         if(COL1 == 0)
  70.                         {
  71. //                                key_num = key_num+0;
  72.                         }
  73.                         else if(COL2 == 0)
  74.                         {
  75.                                 key_num = key_num+1;
  76.                         }
  77.                         else if(COL3 == 0)
  78.                         {
  79.                                 key_num = key_num+2;
  80.                         }
  81.                         else if(COL4 == 0)
  82.                         {
  83.                                 key_num = key_num+3;
  84.                         }
  85.                 }
  86.             COL1 = 0;
  87.             COL2 = 0;
  88.             COL3 = 0;
  89.             COL4 = 0;
  90.             ROW1 = 1;
  91.             ROW2 = 1;
  92.         }
  93.         else
  94.         {
  95.                 key_num = 0xff;
  96.         }
  97.         
  98.         //③第三步:行列组合一下就可以判断出是哪个按键按下了。
  99. }
  100. void Init_595(void)
  101. {
  102.         HC595_SER = 0;
  103.         HC595_RCK = 0;
  104.         HC595_SCK = 0;
  105. }
  106.         
  107. void Send_595(u8 dat)
  108. {
  109.         u8 i;
  110.         for(i=0;i<8;i++)
  111.         {
  112.                 dat <<=1;              //dat = (dat<<1);    //最高位CY
  113.                 HC595_SER = CY;        //先把数据写到引脚上
  114.                 HC595_SCK = 1;         //输出上升沿的时钟信号
  115.                 HC595_SCK = 0;
  116.         }
  117. }
  118. void Display_Seg(u8 HC595_1,u8 HC595_2)
  119. {
  120.         Send_595(HC595_1);          //数码管段码先输出   高电平点亮
  121.         Send_595(HC595_2);          //数码管位码输出     低电平点亮
  122.         HC595_RCK = 1;              //数据输出
  123.         HC595_RCK = 0;
  124. }
  125. void SEG_Task(void)
  126. {
  127.         if(key_num == 255)
  128.             Display_Seg(SEG_NUM[17],~T_NUM[0]);     //数码管刷段码和位码
  129.         else
  130.                 Display_Seg(SEG_NUM[key_num],~T_NUM[0]);
  131. }
复制代码

任务2:密码锁
  1. #include "io.h"
  2. u8 SEG_NUM[]=
  3. {
  4.         0x3F,       /*'0', 0*/
  5.     0x06,       /*'1', 1*/
  6.     0x5B,       /*'2', 2*/
  7.     0x4F,       /*'3', 3*/
  8.     0x66,       /*'4', 4*/
  9.     0x6D,       /*'5', 5*/
  10.     0x7D,       /*'6', 6*/
  11.     0x07,       /*'7', 7*/
  12.     0x7F,       /*'8', 8*/
  13.     0x6F,       /*'9', 9*/
  14.     0x77,       /*'A', 10*/
  15.     0x7C,       /*'B', 11*/
  16.     0x39,       /*'C', 12*/
  17.     0x5E,       /*'D', 13*/
  18.     0x79,       /*'E', 14*/
  19.     0x71,       /*'F', 15*/
  20.     0x40,       /*'-', 16*/
  21.     0x00,       /*' ', 17*/
  22.     0x80,       /*'.', 18*/
  23. };
  24. u8 T_NUM[8]=
  25. {
  26.         0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80
  27. };
  28. /*
  29.      #define ROW1   P06          //端口定义
  30.      #define ROW2   P07
  31.      #define COL1   P00
  32.      #define COL2   P01
  33.      #define COL3   P02
  34.      #define COL4   P03
  35. */
  36. u8 key_num = 0xff;
  37. //任务1:数码管显示当前的按键号
  38. void Task_1(void)
  39. {
  40.         //①第一步:现将P0.0-P0.3输出低电平,P0.6-P0.7输出高电平,如果有按键按下,按下的那一行的IO就会变成低电平,就可以判断出哪一行按下了。
  41.         COL1 = 0;
  42.         COL2 = 0;
  43.         COL3 = 0;
  44.         COL4 = 0;
  45.         ROW1 = 1;
  46.         ROW2 = 1;
  47.         
  48.         if((ROW1 == 0)||(ROW2 == 0))       //如果行按键有按下
  49.         {
  50.                 if((ROW1 == 0)&&(ROW2 == 0))   //如果两行都有按键按下,不处理
  51.                 {
  52.                         
  53.                 }
  54.                 else if(((ROW1 == 1)&&(ROW2 == 0))||((ROW1 == 0)&&(ROW2 == 1)))       //如果有按键按下,而且只有一颗
  55.                 {
  56.                         if(ROW1 == 0)              //判断哪一行,输出行开始的序号
  57.                                 key_num = 0;
  58.                         else if(ROW2 == 0)
  59.                                 key_num = 4;
  60.                         
  61.                         //②第二步:现将P0.0-P0.3输出高电平,P0.6-P0.7输出低电平,如果有按键按下,按下的那一列的IO就会变成低电平,就可以判断出哪一列按下了。        
  62.                         COL1 = 1;
  63.                 COL2 = 1;
  64.                 COL3 = 1;
  65.                 COL4 = 1;
  66.                 ROW1 = 0;
  67.                 ROW2 = 0;
  68.                         
  69.                         if(COL1 == 0)
  70.                         {
  71. //                                key_num = key_num+0;
  72.                         }
  73.                         else if(COL2 == 0)
  74.                         {
  75.                                 key_num = key_num+1;
  76.                         }
  77.                         else if(COL3 == 0)
  78.                         {
  79.                                 key_num = key_num+2;
  80.                         }
  81.                         else if(COL4 == 0)
  82.                         {
  83.                                 key_num = key_num+3;
  84.                         }
  85.                 }
  86.             COL1 = 0;
  87.             COL2 = 0;
  88.             COL3 = 0;
  89.             COL4 = 0;
  90.             ROW1 = 1;
  91.             ROW2 = 1;
  92.         }
  93.         else
  94.         {
  95.                 key_num = 0xff;
  96.         }
  97.         
  98.         //③第三步:行列组合一下就可以判断出是哪个按键按下了。
  99. }
  100. void Init_595(void)
  101. {
  102.         HC595_SER = 0;
  103.         HC595_RCK = 0;
  104.         HC595_SCK = 0;
  105. }
  106.         
  107. void Send_595(u8 dat)
  108. {
  109.         u8 i;
  110.         for(i=0;i<8;i++)
  111.         {
  112.                 dat <<=1;              //dat = (dat<<1);    //最高位CY
  113.                 HC595_SER = CY;        //先把数据写到引脚上
  114.                 HC595_SCK = 1;         //输出上升沿的时钟信号
  115.                 HC595_SCK = 0;
  116.         }
  117. }
  118. void Display_Seg(u8 HC595_1,u8 HC595_2)
  119. {
  120.         Send_595(HC595_1);          //数码管段码先输出   高电平点亮
  121.         Send_595(HC595_2);          //数码管位码输出     低电平点亮
  122.         HC595_RCK = 1;              //数据输出
  123.         HC595_RCK = 0;
  124. }
  125. u8 password[8] = {16,16,16,16,16,16,16,16};
  126. u8 Seg_no = 0;
  127. void SEG_Task(void)
  128. {
  129.         u8 num = 0;
  130.         if(Seg_no==0)                                
  131.         {               
  132.                 Display_Seg(SEG_NUM[password[0]],~T_NUM[0]);     //数码管刷段码和位码
  133.         }
  134.         else if(Seg_no==1)                           
  135.         {               
  136.                 Display_Seg(SEG_NUM[password[1]],~T_NUM[1]);     //数码管刷段码和位码
  137.         }
  138.         else if(Seg_no==2)                           
  139.         {
  140.                 Display_Seg(SEG_NUM[password[2]],~T_NUM[2]);      //数码管刷段码和位码
  141.         }        
  142.         else if(Seg_no==3)                           
  143.         {               
  144.                 Display_Seg(SEG_NUM[password[3]],~T_NUM[3]);     //数码管刷段码和位码
  145.         }
  146.         else if(Seg_no==4)                           
  147.         {               
  148.                 Display_Seg(SEG_NUM[password[4]],~T_NUM[4]);     //数码管刷段码和位码
  149.         }
  150.         else if(Seg_no==5)                           
  151.         {
  152.                 Display_Seg(SEG_NUM[password[5]],~T_NUM[5]);      //数码管刷段码和位码
  153.         }        
  154.         else if(Seg_no==6)                           
  155.         {               
  156.                 Display_Seg(SEG_NUM[password[6]],~T_NUM[6]);     //数码管刷段码和位码
  157.         }
  158.         else if(Seg_no==7)                           
  159.         {               
  160.                 Display_Seg(SEG_NUM[password[7]],~T_NUM[7]);     //数码管刷段码和位码
  161.         }
  162.         Seg_no ++;
  163.         if(Seg_no>7)
  164.                 Seg_no = 0;
  165. }
  166. u8 Key_Vol3 = 0;
  167. u8 key_no = 0;
  168. void PW_write_Task(void)
  169. {
  170.         if(key_num<0xff)
  171.         {
  172.                 Key_Vol3++;
  173.                 if(Key_Vol3 == 5)
  174.                 {
  175.                         if(key_no == 0)
  176.                         {
  177.                                 password[0] = 16;
  178.                                 password[1] = 16;
  179.                                 password[2] = 16;
  180.                                 password[3] = 16;
  181.                                 password[4] = 16;
  182.                                 password[5] = 16;
  183.                                 password[6] = 16;
  184.                                 password[7] = 16;
  185.                         }
  186.                         password[key_no] = key_num;
  187.                         key_no++;
  188. //                        password[7] = 17;
  189.                         if(key_no == 8)
  190.                         {
  191.                                 if((password[0]==1)&&(password[1]==2)&&(password[2]==3)&&(password[3]==4)&&(password[4]==5)&&(password[5]==6)&&(password[6]==7)&&(password[7]==0))
  192.                                 {
  193.                                         password[0] = 17;
  194.                                         password[1] = 17;
  195.                                         password[2] = 17;
  196.                                         password[3] = 17;
  197.                                         password[4] = 17;
  198.                                         password[5] = 17;
  199.                                         password[6] = 17;
  200.                                         password[7] = 1;
  201.                                 }
  202.                                 else
  203.                                 {
  204.                                     password[0] = 16;
  205.                                     password[1] = 16;
  206.                                     password[2] = 16;
  207.                                     password[3] = 16;
  208.                                     password[4] = 16;
  209.                                     password[5] = 16;
  210.                                     password[6] = 16;
  211.                                     password[7] = 16;
  212.                                 }
  213.                                 key_no = 0;
  214.                         }
  215.                 }
  216.         }
  217.         else
  218.         {
  219.                 Key_Vol3 = 0;
  220.         }
  221. }
复制代码

附件程序包:
AI8051U教学视频第11集矩阵按键学习程序1.zip (155.78 KB, 下载次数: 22)
AI8051U教学视频第11集矩阵按键学习程序2.zip (159.94 KB, 下载次数: 22)
  





回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-29 10:30:51

13

主题

429

回帖

2366

积分

超级版主

积分
2366
发表于 2025-1-13 11:55:45 | 显示全部楼层
第十二课:复位系统

一、硬件复位
1.上电复位
截图202501131139102627.jpg
2.低压复位
截图202501131139281452.jpg
3.复位脚复位
截图202501131140047651.jpg
4.看门狗复位
截图202501131140219769.jpg
任务1:编写看门狗程序,有USB功能要先加USB复位
USB复位主要程序:
  1. void Delay10ms(void)        //@24.000MHz
  2. {
  3.         unsigned long edata i;
  4.         _nop_();
  5.         _nop_();
  6.         _nop_();
  7.         i = 59998UL;
  8.         while (i) i--;
  9. }
  10. void USB_Reset_U(void)
  11. {
  12.         P3M0 =0x00;
  13.         P3M1 =0x00;
  14.         
  15.         P3M0 &=~0x03;
  16.         P3M1 |=0x03;
  17.         
  18.         USBCON =0x00;
  19.         USBCLK =0x00;
  20.         IRC48MCR = 0x00;
  21.         Delay10ms();
  22. }
复制代码
看门狗主要程序:
  1. void main(void)                                               //主函数
  2. {
  3.         int count=1;                                    //按键计数变量
  4.         
  5.         Sys_init();                                     //系统初始化        
  6.         usb_init();                                     //USB CDC接口配置
  7.         
  8.         IE2 |= 0x80;                                    //使能USB中断
  9.         Timer0_Init();                                  //定时器初始化
  10.         Init_595();
  11.     EA = 1;                                         //IE |=0x80;
  12.    
  13.         P40=0;
  14.         
  15.     while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  16.         WDT_CONTR = 0x24;
  17.         
  18.         while(1)
  19.         {
  20.                 if (bUsbOutReady)
  21.         {
  22.             //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  23.             
  24.             usb_OUT_done();
  25.         }
  26.                 Task_Pro_Handler_Callback();        //执行功能函数        
  27.         if(P33 !=0)                       //P33按下超过0.5秒执行复位
  28.                     WDT_CONTR = 0x34;
  29.         }
  30. }
复制代码

二、软件复位
截图202501131149486989.jpg
软件复位主要程序:
  1. u8 Key_Vol = 0;
  2. void KEY_Task(void)
  3. {
  4.     if( P33 == 0 )
  5.     {
  6.          Key_Vol++;
  7.          if( Key_Vol==5 )
  8.          {
  9.              //按键按下的任务
  10. //             printf( "按键单击\r\n" );
  11.                         
  12.                          USB_Reset_U();
  13. //                         IAP_CONTR = 0x60;
  14.                          IAP_CONTR = 0x20;
  15.          }
  16.     }
  17.     else
  18.     {
  19.         Key_Vol = 0;
  20.     }        
  21. }
复制代码
IAP_CONTR = 0x60;  //进入下载模式

截图202501131153251105.jpg
IAP_CONTR = 0x20;  //从头开始运行用户程序

截图202501131154288533.jpg
AI8051U教学视频第12集复位系统学习程序.zip (9.04 MB, 下载次数: 22)


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 10:28 , Processed in 0.158181 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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