学习AI8051U试验箱送实验箱=====实验箱已安排发出
第一集知道了实验箱的一些功能,包括能够手写识别,录入视频等第二集学习了开发板的硬件模块,包括ai8051芯片以及外围电路,常见的GPIO口,USB下载,USB转串口下载等
还有需要用到keil5工具,通过isp工具,将芯片资料注入到keil5中,方便后续开发。
芯片能够兼容8位的8051,因此在写程序时应当注意,有8位的,有32位的 第三集开始烧录,不过缺少实验箱,没法做,看看代码
#include "ai8051u.h" //调用头文件
void main(void)
{
P0M0 = 0; //P0端口(P00-P07)为准双向口
P0M1 = 0;
P4M0 = 0; //P4端口为准双向口
P4M1 = 0;
while(1)
{
P40 = 0; //P40端口输出0V
P00 = 0; //P00端口输出0V
P01 = 0; //P01端口输出0V
}
}
代码里面0就是输出0V,while意思是一直循环执行,一直输出0V 第四集,在写程序时,一定要记得头文件
#include "ai8051u.h" //调用头文件
#include "stc32_stc8_usb.h" //调用头文件
这俩要和main.c文件放在一起
usb_init();这行是配置usb口的,不用管
while (DeviceState != DEVSTATE_CONFIGURED); 等usb程序弄完
char *USER_STCISPCMD = "@STCISP#";后面的@STCISP# 相当于密码,可以自己在isp上设置,就有个独一无二的密码了
第五集
#define u8unsigned char 这个定义的是8位无符号变量,总共0-255
#define u16 unsigned int 这个定义的是16位无符号变量是0-65535
if( X && Y )
else if和else是判断语句,选择执行哪个
&& 与符号,前面和后面都必须满足才能算
printf("条件为真\r\n");括号内的直接输出
printf("X / Y = %u \r\n",(u16)(X/Y)); %u用来替换变量,有很多种,什么/n等,都有自己的作用
后面有个u16,加个括号,就是转换位无符号16位的数
常用的运算符 + - */ %等
第六集仍然是点灯,只需要检测到端口被按下,就可以改变电平
代码:
按键按下就是 P32 == 0
还学习了一个消抖方法,延时消抖:
oid Delay20ms(void) //@24.000MHzDelay20ms();
{
unsigned long edata i;
_nop_();
_nop_();
i = 119998UL;
while (i) i--;
}
延时20ms的话,经过isp计算,i应当= 119998UL
这样正好是20ms
第七集定时器中断。
单片机是单核,没有办法执行多条命令,就需要想办法控制时间
利用定时器完成时间的计算、延时。
1.采用isp直接生成定时函数,要设置延时时间、定时器选择,通用就行
2. 复制代码到程序中
使用的时候在main函数里面使用
1. 先将定时器初始化 Timer0_Init();
2. 三秒执行一次的函数,也就是三秒钟,状态翻转一次 !的意思是取反
void Timer0_Isr(void) interrupt 1
{
state = !state;
P00 = state;
P01 = !state;
}
定时器原理
系统时钟,1微秒计数24次---24M
可以通过8分频寄存器,放慢速度,或者通过辅助寄存器设置时钟12分频
定时器0的模式0较难:16位的重载模式。通过两个隐藏的寄存器TH0 TL0实现
结合代码看:
TM0PS = 0x0F; 用来分频的 --0x05位15
AUXR &= 0x7F; 设置定时器时钟模式
TMOD &= 0xF0; 设置定时器模式
TL0 = 0xDC; 设置定时初始值TL0的
TH0 = 0x0B; 设置定时初始值TH0的
TF0 = 0; 清除TF0标志
TR0 = 1; 定时器0开始计时
ET0 = 1; 使能定时器0中断
定时器本质上就是从0到65535后,溢出,置一次标志位,就可以中断了
最后,带领我们写了一个救护车灯控制器
任务3:救护车灯控制器,按下报警按钮,红蓝交替闪烁(LED1和LED2 表示红和蓝灯),再按一下报警按钮,红蓝灯停止。
if( P32 == 0 ) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
Run_State = !Run_State; //运行状态取反
if( Run_State==1 ) //运行
{
Timer0_Init();
}else{
TR0 = 0; //关闭定时器
P00 = 1;
P01 = 1;
}
P00 = 0;
Timer0_Init();
while( P32 == 0 );等待P32松开
}
} 七楼最后应该是65536 溢出,不是65535
页:
[1]