Jellyfish从89C51到AI8051学习贴第十二天!
今天继续学习《8051U深度入门到32位51大型实战教学视频》第十集 虚拟键盘LED和数码管。
0x01 学习重点
- 使用AiCube-ISP-v6.96P进行 键盘 LED 数码管仿真
0x02 学习心得
- 密码锁课后小练习


if (bUsbOutReady){
u8 i;
for(i=0;i<8;i++){
if(DisplayStr[i]=='-'){
if(DisplayStr[7] == 'n'){
strcpy(DisplayStr, "--------");
}
DisplayStr[i]=UsbOutBuffer[5];
if(i==7){
// 3. 使用 strcmp 比较字符串内容
if(strcmp(DisplayStr, "12345678") == 0) {
strcpy(DisplayStr, "----open");
}else{
strcpy(DisplayStr, "--------");
}
}
break;
}
}
usb_OUT_done(); //查询方式处理USB接收的数据
}
//定时器定时调度这个
//SEG7_ShowString函数不能处理‘open’字符串,所以单独使用段码展示。
u8 open[]={
0x40, /*'-', 36*/
0x40, /*'-', 36*/
0x40, /*'-', 36*/
0x40, /*'-', 36*/
0x5C, /*'O', 24*/
0x73, /*'P', 25*/
0x79, /*'E', 14*/
0x54, /*'N', 23*/
};
char DisplayStr[] = "--------";
void Display_Task(){
if(strcmp(DisplayStr, "----open") == 0) {
SEG7_ShowCode(open);
}else{
SEG7_ShowString(DisplayStr);
}
}
0x03 待学习重点
-
89C51的经验有多少可以迁移到STC32G上**(已完成)**
目前看感觉在前学过的那些东西已经跟不上时代了,现在重新系统性的学习AI8051。
-
如何将传统51单片机项目迁移到STC32G平台上**(已完成)**
通过AiCube项目创建助手功能选择IO口、中断等功能类型,一键生成初始keil工程,然后把核心逻辑代码复制过来就能搞定!
-
硬件USB控制器可以玩出什么花样?(持续学习 持续探索)
- USB转双串口(其实是不是通过软件模拟可以实现USB转N串口?加上蓝牙模块可以实现无线串口调试了,再加上MAX232打上RJ45就可以用来配置交换机了。
-
在用户代码中嵌入 USB-CDC 代码,实现一直修改代码一直USB不停电下载。(已完成)
-
定时器一次只能定时一个此,如果有很多个任务怎么办?(已完成)
初步猜测可能性:1、在定时器函数内部增加if/else判断某个全局变量的值确定要执行哪一段语句。2、使用多个定时器。
答案:想的差不多,方法如下:
通过数组(包括结构体数组),定时器中断函数对数组的多个成员累加,在主函数判断实现多任务序列调度。
-
如果我的函数执行的很慢,定时器等待的时间很短,会不会出现问题?(已完成)
会!如果太慢跟不上定时器的调用就会跳拍。但是可以通过累计需要调用函数的次数,每次执行完减一,达到不会漏执行的效果。
-
74HC595会不会跟不上单片机的速度而导致了数据的丢失?如果会,那么速度多快就会丢失数据?(已完成)
实测实验箱44.2368MHz以上数码管显示会出现问题。)