2
20
82
注册会员
了解AI8051U的
1.可以刷新屏幕,帧率挺高。
2.可以兼容89C52
3.拥有16位PWM,12位ADC,接口多
使用道具 举报 送花
1.了解AI8051U试验箱
有非常多的功能,各种串口,示波器输入、TF卡、音频输入输出、OLED屏、TFT屏、流水灯、数码管、红外发接装置、矩阵键盘和ACD键盘(省引脚)AI8H2K12U(可转双串口)
2.安装Keil
3.学习了用下载器,下载第一个程序
1.进行芯片选型
2.新建一个工程,先建立一个Project,建立几个空白的main.c添加到文件夹里,并双击添加进去,并根据手册进行一些配置,如果代码超过64k,要重新设置一些地址并且output——hex-386
3.添加头文件 #include<文件名.h> 或 #include“文件名,h”(现在文件夹内进行搜索),用下载器保存头文件到文件路径,学习一些基础语法
4.学习寄存器配置引脚口的模式根据手册,设置为准双向口。 还可以用下载器生成引脚口配置程序。
5.程序
#include"AI8051U.h" //调用头文件
void main(void) { P0M1 = 0x00; P0M0 = 0x00; //P0端口为准双向口 P4M1 = 0x00; P4M0 = 0x00; //P4端口为准双向口
while(1) { P40 = 0; P00 = 0; P01 = 0; P02 = 0; }
}
第四节 USB不停电下载
1.下载usb库函数,了解查询模式和中断模式,并按照生一节课学的,添加lib(c+h文件)到main.c目录下,添加.h文件。并添加到Group里。
2.按照示例代码,复制一些代码进main.c.P_SW2 第七位是EAXFR 0:禁止访问 1:使能访问P_SW2 = 全部覆盖 P_SW2 |= 改某一位1,其他位置1不变 IE寄存器第七位赋值为1()usb允许中断
3.第一次下载还是要按按键,后面就不需要了
4.代码
#include"AI8051U.h" //调用头文件 #include"stc32_stc8_usb.h" //调用有文件
char *USER_DEVICEDESC = NULL; char *USER_PRODUCTDESC = NULL; char *USER_STCISPCMD = "@STCISP#"; void main(void) { P_SW2 |= 0x80; //B7位写1,使能访问XFR P0M1 = 0x00; P0M0 = 0x00; P1M1 = 0x00; P1M0 = 0x00; P2M1 = 0x00; P2M0 = 0x00; P3M1 = 0x00; P3M0 = 0x00; P4M1 = 0x00; P4M0 = 0x00; P5M1 = 0x00; P5M0 = 0x00; P6M1 = 0x00; P6M0 = 0x00; P7M1 = 0x00; P7M0 = 0x00; usb_init(); //usb函数初始化 IE2 |= 0x80; //使能USB中断 EA = 1; //IE |= 0X80;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置 while(1) { if (bUsbOutReady) { USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试) usb_OUT_done(); } P40 = 0; P00 = 0; P01 = 0; P02 = 0; P03 = 0; P04 = 0; }
#define u8 unsigned char //8位无符号定义(0~255) u8 x = 20; u8 y = 11; char *USER_DEVICEDESC = NULL; char *USER_PRODUCTDESC = NULL; char *USER_STCISPCMD = "@STCISP#"; void main(void) { P_SW2 |= 0x80; //B7位写1,使能访问XFR P0M1 = 0x00; P0M0 = 0x00; P1M1 = 0x00; P1M0 = 0x00; P2M1 = 0x00; P2M0 = 0x00; P3M1 = 0x00; P3M0 = 0x00; P4M1 = 0x00; P4M0 = 0x00; P5M1 = 0x00; P5M0 = 0x00; P6M1 = 0x00; P6M0 = 0x00; P7M1 = 0x00; P7M0 = 0x00; usb_init(); //usb函数初始化 IE2 |= 0x80; //使能USB中断 EA = 1; //IE |= 0X80;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置 while(1) { if (bUsbOutReady) //如果接收到了一些数据 { if(x && y ) //如果条件为真,输出什么 { printf("条件为真\r\n"); } else { printf("条件为假\r\n"); } //USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试) // printf("x / y = %d\r\n",(u16)(x/y)); //强制转换为一个整数 // printf("x %% y = %d\r\n",(u16)(x%y)); //强制转换为一个整数 usb_OUT_done(); } }
**1. GPIO-输入输出端口 如果VCC接3.3 IO最高 3.6 注意输入电压最小值 IO口四种模式(1.准双向口 灌入20mA 拉电流270~150uA2.推挽输出20mA3.高阻输入 电流不灌入也不输出4.开漏模式) 试验箱单片机是3.3v电源 对于这个单片机来说 低电平不能高于0.99 高电平不能低于1.18 **
2.用按键要注意消抖,延时的一用法
3.代码
#include"AI8051U.h" //调用头文件 #include"stc32_stc8_usb.h" //调用有文件 #include"intrins.h" #define u8 unsigned char //8位无符号定义(0~255) u8 state = 0; char *USER_DEVICEDESC = NULL; char *USER_PRODUCTDESC = NULL; char *USER_STCISPCMD = "@STCISP#"; void Delay20ms(void) { unsigned long edate i; _nop_(); _nop_(); i = 119998UL; while (1) i--; } void main(void) { WTST = 0; EAXFR = 1; CKCON = 0; P_SW2 |= 0x80; //B7位写1,使能访问XFR P0M1 = 0x00; P0M0 = 0x00; P1M1 = 0x00; P1M0 = 0x00; P2M1 = 0x00; P2M0 = 0x00; P3M1 = 0x00; P3M0 = 0x00; P4M1 = 0x00; P4M0 = 0x00; P5M1 = 0x00; P5M0 = 0x00; P6M1 = 0x00; P6M0 = 0x00; P7M1 = 0x00; P7M0 = 0x00; usb_init(); //usb函数初始化 IE2 |= 0x80; //使能USB中断 EA = 1; //IE |= 0X80; P40 = 0; while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置 while(1) { if (bUsbOutReady) //如果接收到了一些数据 { usb_OUT_done(); } //任务1.按下P32按钮灯亮,松开灯灭 if(P32 == 0) { Delay20ms(); //延时20ms if( P32 == 0 ) { state !=state; P00 = state; while(P32 == 0); } } } } usb_OUT_done(); } //任务1.按下P32按钮灯亮,松开灯灭 if(P32 == 0) { Delay20ms(); //延时20ms if( P32 == 0 ) { state !=state; P00 = state; while(P32 == 0); } } }
Pola*** 发表于 2024-12-25 14:11 第六节 **1. GPIO-输入输出端口 如果VCC接3.3 IO最高 3.6 注意输入电压最小值 IO口四种模式( ...
1.认识定时器(1,可实现软件计时,周期的完一项工作。2.代替长时间Delay,提高程序的效率和处理速度)可打断主循环
2./xfd 的用法 过 三 驱 数 等字
3。学习了定时器的原理,如何用公式计算看看定时器多久进一次
4.函数的定义内容和声明 调用
函数定义:包含返回值,函数名,入口参数,并定义了具体功能
声明:在头文件或被调用之前使用,注意末尾加分号
调用:在需要调用的地方直接使用函数名,加上括号和分号。如果有入口的参数,需要在括号的多个参数之间加逗号隔开
函数声明:void Delay20ms(void)
{
** unsigned long edate i;**
** _nop_();**
** i = 119998UL; //执行119998次-- 实现20ms定时**
** while (1) i--;**
返回值类型 函数名(入口参数);void Delay20ms(void);
函数名(入口参数); Delay20ms();
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-5-4 04:08 , Processed in 0.168597 second(s), 108 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.