一,文件的创建创建文件需要三步:新建文件并保存,添加到工程,添加引用路径。一般的一个.c和一个.h文件执行一个设置或一个任务或功能。这样可以让代码简洁。.h文件格式:#ifndef_XXX_H#define_XXX_H调用头文件函数声明#endif.c文件格式#include “xxx.h”函数定义添加文件一定要记得引用路径和添加到工程里。 编写好文件后,打开工程设置,将文件所在的路径添加到工程中。 二,结构体什么是结构体:将一些有内置联系的不同变量组织起来,封装成一个整体,即定义一个结构体,这是一种新的数据类型。结构体声明:使用关键字struct ,struct结构体名 //结构体名并非必要{成员列表};Typedef struct{U8 run; //任务状态U16 timcount; //定时计数器U16 tritime; //重载计数器Void(*taskhook)(void);//任务函数也是一个函数指针可以调用任何参数为空,返回值为空//的函数} TASK_COMPONENTS;Static TASK_COMPONENTS Task_coms[] = //创建结构体数组{//状态计数周期函数{0, 1, 1,执行功能},{0, 10, 10,执行功能},};在工程中创建两个文件:task.c和task.h在task.c中输入#include “task.h”Typedef struct{U8 run;//任务状态U16 timcount;//定时计数器U16 tritime;//重载计数器Void(*taskhook)(void);//任务函数} TASK_COMPONENTS;Static TASK_COMPONENTS Task_coms[] ={//状态 计数 周期 函数{0,1,1, samle_display},{0,10, 10, samle_matrixkey},{0,10, 10, samle_adckey},{0,300, 300, samle_NTC},{0,500, 500, samle_RTC},//这里还可以添加其他任务};Task.h中输入#ifndef__TASK_H#define __TASK_H#include “config.h”Typedef struct{U8 run;//任务状态U16 timcount;//定时计数器U16 tritime;//重载计数器Void(*taskhook)(void);//任务函数} TASK_COMPONENTS;Void task_marks_handler_callback(void);Void task_pro_handler_callback(void);#endif就可以实现定时器周期性多任务调度系统。
第八集的内容比较多,而且涉及 的概念也多,函数,指针,数组,结构体,糅杂在一起,需要很好的C语言功底才能理解和应用,多花点时间去学习。 求助!!!
实验2 查询方式,查询到电脑命令后,printf_usb("Hello World!\r\n")
按照视频教学的方法创建项目,添加代码,编译没有问题,下载到实验箱后,运行出错,发送6,没有返回Hello World! 。如图:
怎么回事啊。
这几天反复看AI8051U手册,才知道是自己没有理解视频教程的意思而导致的问题。程序没有错,连接试验箱,下载程序到试验箱后,要在CDC-HID串口助手选项卡内右侧的多字符串发送区域进行设置,勾选发送选项和HEX选项,勾选相应的两个就可以了。在发送小窗口右键点击,输入返回的内容,比如“HELLO WORLD!”,对应的HEX小窗口左键点击输入相应的数字,比如‘6’ ,设置好后,点击发送小窗口,则在接收窗口就可以显示相应的内容。
感谢STC公司免费赠送的AI8051U试验箱,全面进入32位时代。利用试验箱和AiCube进行点灯实验。同时实现不停电下载功能。打开 AiCube-ISP(v6.96f)软件,点击AiCube选项卡,出现如图的窗口: 点击新建AiCube项目,在出现的新窗口中:‘目标单片机型号’选择Ai8051U-32Bit。 ‘项目名称’输入led01。‘项目保存路径’选择自己想要保存的文件夹。点选‘创建项目文件夹’。‘项目文件类型’为单文件项目。点击确定。点选左侧的‘USB通用串行总线’然后点击保存按钮,这样可以实现不停电下载功能。再点击创建KEIL项目及程序文件按钮,打开KEIL软件。双击main.c,打开main.c文件,可以看到程序的主框架已经写好,只需在主函数的添加用户代码处添加如下代码即可:P40 = 0;P00 = 0;P07 = 0;保存,编译,就可以创建单片机可执行文件:led01.hex文件。 回到AiCube-ISP软件当中,要想实现不停电下载,就要在‘收到用户命令后复位到ISP监控程序区’选项卡中将下面的三个都点选上。 点击下载按钮,程序顺利下载完成,试验箱上的led灯亮了两个,第一个和第八个。成功。添加一些代码实现led灯闪烁功能: P40 = 0; P00 = 0; //LED灯亮 delay_ms(400);//延时函数,延时400毫秒。 P00 = 1; //LED灯灭 delay_ms(400);//延时400毫秒下载到试验箱,LED灯开始闪烁。实验成功。
加油,坚持就是胜利,我也是打卡领到实验箱的,对学习单片机很有意义。
注册坛友福利【免费+包邮 送】擎天柱:Ai8051U转89C52核心板 | 强大的视频学习资源
先用这个学习
【免费 + 包邮 送】 送/申样/采购 可上班时间加 如下您对应地区分销商的客服 QQ或微信联系
加STC华南区客服司经理QQ: 2234917869 ;微信:18012226298要求 【免费+包邮】 送, 还免费教仿真
加STC华南区客服刘经理QQ: 3398500488 ;微信:18106296592要求 【免费+包邮】 送, 还免费教仿真
加STC华南区客服佘经理QQ: 614777595; 微信:18106296591 要求 【免费+包邮】 送, 还免费教仿真
加STC华南区客服曹经理QQ: 1933892258 ;微信:18106296595 要求 【免费+包邮】 送, 还免费教仿真
加STC华东区客服聂经理QQ: 2593903262; 微信:18106296598要求 【免费+包邮】 送, 还免费教仿真
加STC华东区客服吴经理QQ: 1463035472; 微信:19952583954要求 【免费+包邮】 送, 还免费教仿真
加STC西北区客服孙经理QQ: 1347154513 ;微信:18106296593要求 【免费+包邮】 送, 还免费教仿真
加STC华北区客服杨经理QQ: 1638975601 ;微信:19952583876要求 【免费+包邮】 送, 还免费教仿真
加STC华中区客服唐经理QQ:2571301708 ; 微信:18106296589 要求 【免费+包邮】 送, 还免费教仿真
加STC东北区客服李经理QQ: 1017142298 ;微信:19952583534要求 【免费+包邮】 送, 还免费教仿真
加STC西南区客服曹经理QQ: 3897745450 ;微信:18012226281 要求 【免费+包邮】 送, 还免费教仿真
加STC西南区客服吴经理QQ: 1463035472 ;微信:19952583954 要求 【免费+包邮】 送, 还免费教仿真
工作时间:8:30-12:00,13:00-17:30(周一 到 周五, 法定节假日除外)
【免费 + 包邮 送】 送/申样/采购传统电话热线:
0513-89896509,0513-55012928,0513-55012929
第九集数码管一、数码管介绍:数码管本质上就是几个LED灯共同组成的8字形显示器,如图1,8个LED
他有很多样式。可以显示数字,部分字母及符号。可分为共阴极和共阳极两种。试验箱上为8位8字形共阴极数码管如图2.
数码管引脚通过两个74HC595芯片与单片机的引脚连接,单片机控制数码管的显示。任务1:数码管静态显示数字利用数组保存数码管断码表:0x3F, /*'0', 0*/ 0x06, /*'1', 1*/ 0x5B, /*'2', 2*/ 0x4F, /*'3', 3*/ 0x66, /*'4', 4*/ 0x6D, /*'5', 5*/ 0x7D, /*'6', 6*/ 0x07, /*'7', 7*/ 0x7F, /*'8', 8*/ 0x6F, /*'9', 9*/ 0x77, /*'A', 10*/ 0x7C, /*'B', 11*/ 0x39, /*'C', 12*/ 0x5E, /*'D', 13*/ 0x79, /*'E', 14*/ 0x71, /*'F', 15*/ 0x40, /*'-', 16*/ 0x00, /*' ', 17*/ 0x80, /*'.', 18*/定义数组Unsigned char SEG_NUM[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,0x7D,0x07, 0x7F, 0x6F, };定义变量:#define HC595_SER P34//数据引脚#define HC595_SCK P32//时钟引脚#define HC595_RCK P35//移出引脚输出函数Void send_595(unsigned char date){Unsigned char i;For(i=0;i<8;i++){Date <<=1; //将数据右移一位,则最高位的移入CYHC595_SER = CY;//先把数据写到引脚上HC595_SCK = 1; //给一个上升沿信号HC595_SCK = 0; //复位}}Void display_seg(unsigned char i1,unsigned char i2){Send_595(i1);//数码管断码输出,高电平点亮Send_595(i2);//数码管位码输出,低电平点亮HC595_RCK = 1;HC595_RCK = 0;}Void seg_task(void){Display_seg(seg_num,0xfe);}在主函数中调用seg_task()函数,就可以实现静态显示数字了。
页:
1
[2]