资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,單片机控制,led灯點亮,重要内容,壹、點亮板子上的第壹种灯D0,二、點亮板子上的D0、D2、D4、D6灯,与D1、D3、D5、D7灯交替闪烁,三、流水灯:從D0-D7依次點亮,壹、點亮板子上的第壹种灯D0,1)目的,理解單片机的基本设计思绪和编程措施,和單片机的最小系统。,2)分析,运用單片机的壹种输入/输出口来控制壹盏发光二极管點亮。,引脚:,1)4個I/O口占了32個引脚,2)電源和接地又占了2個引脚,3)剩余的6個引脚是時钟引脚和控制引脚,硬件阐明,使用單片机的P1口来驱動8個LED,发光二极管的阳极接高電平,故P1口為低電平時,就可以驱動其點亮,D0与P1.0口是相连的,P1.0用来表达P1口的最低位;,本任务中給單片机的P1.0口壹种低電平信号即可完毕控制。因此,只需給P1.0低電平信号,其他引脚均為高電平。,點亮D0灯:,D7 D6 D5 D4 D3 D2 D1 D0,1 1 1 1 1 1 1 0,從二進制转化為拾六進制:0 xfe,源程序,#include,void main(),P1=0 xfd;,Keil的使用,掌握Keil工程的建立和软件的開发;,1启動Vision,Vision2是壹种原则的Windows应用程序,双击Keil Vision2图標即可启動,也可以选择“開始”“程序”Keil Vision2”命令来启動运行。其主界面如图1-28所示。,2创立壹种项目并选择單片机,选择“Project”(项目)“New Project”(新建项目)命令,如图1-29所示,将弹出“Greate New Project”(新建项目)對话框,随即會弹出壹种對话框,规定选择單片机的型号。在该對话框中显示了Vision2的器件数据库,從中可以根据使用的單片机来选择。,AT89S52,8051 based Full Static CMOS controller with Three-Level Program Memory Lock,32 I/O lines,3 Timers/Counters,8 Interrupts Sources,Watchdog Timer,2 DPTRs(DATA POINTER REGISTERS),8K Flash Memory,256 Bytes On-chip RAM,基于8051全静态CMOS控制器、三级加密程序存储器、32個I/O口、三個定期器/计数器、八個中断源、看门狗定期器、2 個数据指针 寄存器、8k字节Flash,256字节片内RAM,3创立壹种新的源程序文献,并把這個源文献添加到项目中,單击工具栏中的新建文献图標(或选择“File”(文献)“New”(新建)命令),文献操作窗口即可出現新建文献。保留该空白文献,單击工具栏中的保留图標(或选择“File”(文献)“Save”(保留)命令),弹出如图1-32所示的“Save as”(保留為)對话框,在“文献名”文本框中输入欲保留的文献名,保留時注意加上對的的後缀名。,單击Target 1前面的+号,然後在Source Group 1上單击鼠標右键,弹出快捷菜單。,选择“Add Files to Group Source Group 1”(添加文献到项目)命令,弹出如图1-34所示的對话框。选中文献(注意选择文献类型),然後單击“Add”(添加)按钮,即可添加选中文献到项目中。,4输入源程序:此時就可以输入源程序了。,5设置目的硬件的工具选项,程序编写完毕後,還要對项目進行深入的设置,以满足规定。,“Output”选项卡,如图所示,其中有多种选项,此处选择“Create HEX File”复选框用于生成可执行代码文献,该文献可以用编程器写入單片机芯片,文献的扩展名為.HEX,默认状况下该项未被选中,假如要写芯片做硬件试验,就必须选中该项。其他选项均取默认值,不做任何修改。,6编译项目并创立HEX文献,可以通過工具栏中的图標直接進行。從左到右的图標分别是:编译、编译连接、所有重建、停止编译和對工程進行设置。,對源程序编写之後编译,最终要得到成果,提醒0個錯误,0個警告。同步還可看到,该程序的内部RAM的使用量(data=8.0),外部RAM的使用量(xdata=0),代码量(code=18)等某些信息。,7.将生成的hex文献,通過ISP下载到板子中。,請观测現象!,源程序,#include,void main(),P1=0 xfd;,C語言复习,Main 函数格式:void main()特點:無返回值,無参。任何壹种C程序有且仅有壹种main函数,它是整個程序開始执行的入口。例:void main()总程序從這裏開始执行;其他語句;,C語言-51單片机的頭文献,壹般有:reg51.h reg52.h math.h ctype.h stdio.h stdlib.h absacc.h,常用有:reg51.h reg52.h,(定义特殊功能寄存器和位寄存器);,math.h (定义常用数學运算);,拾六進制,是二進制的简短表达形式。,拾進制中的0-15分别表达為拾六進制的0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,纯熟掌握二進制与拾六進制之间的转换。,规律:壹般把四個二進制数放在壹起转换成壹种拾六進制数,转换時先把二進制数转换成拾進制数,再把拾進制数转换成拾六進制数。,二進制和拾六進制的转换,如:0001B-1H,B表达為二進制,H為拾六進制,1001B-9H,1010B-AH,0010 1100-2CH,1111 1110-FEH,在C語言编程中是不能用H的.拾六進制整常数的前缀為0X或0 x。,拾六進制整常数,拾六進制整常数的前缀為0X或0 x。其数码取值為09,AF或af。,如下各数是合法的拾六進制整常数:0X2A(拾進制為42)0XA0(拾進制為160)0XFFFF(拾進制為65535),如下各数不是合法的拾六進制整常数:5A(無前缀0X)0X3H(具有非拾六進制数码),多种進位制的對应关系,十进制,二进制,十六进制,十进制,二进制,十六进制,0,0,0,9,1001,9,1,1,1,10,1010,A,2,10,2,11,1011,B,3,11,3,12,1100,C,4,100,4,13,1101,D,5,101,5,14,1110,E,6,110,6,15,1111,F,7,111,7,16,10000,10,8,1000,8,二、點亮板子上的0、2、4、6灯,与1、3、5、7灯交替闪烁,點亮0、2、4、6灯:,D7 D6 D5 D4 D3 D2 D1 D0,1 0 1 0 1 0 1 0,從二進制转化為拾六進制:0 xaa,點亮1、3、5、7灯:,D7 D6 D5 D4 D3 D2 D1 D0,0 1 0 1 0 1 0 1,從二進制转化為拾六進制:0 x55,#include,#define uint unsigned int,#define uchar unsigned char,void delay();,void main(),while(1),P1=0 xaa;,delay();,P1=0 x55;,delay();,void delay(),uint x,y;,for(x=100;x0;x-),for(y=600;y0;y-),;,1)宏定义,#define uint unsigned int,#define uchar unsigned char,#define 標识符 字符串,C語言中的例子:,#define PI 3.1415926,2)函数申明,函数申明是指函数的定义在背面,而前面需要對它進行调用,這样就需要预先作申明,壹般来說函数的申明只是函数首部加上分号即可。,3)数据类型,Int,signed int 范围是多少?,unsigned int 范围是多少?,char 可以表达小整数或者單個字符。,當char表达整数時,signed char的范围是多少?unsigned char的范围是多少?,C,51,的数据类型,基本数据类型,类型,符号,关键字,数的表达范围,所占位数,整型,字符型,实型,有,無,(signed)int,16,-3276832767,(signed)short,16,-3276832767,(signed)long,32,-21474836482147483647,16,unsigned int,065535,32,04294967295,unsigned long int,unsigned short int,16,065535,有,float,32,3.4e-383.4e38,有,double,64,1.7e-3081.7e308,有,char,8,-128127,無,unsigned char,8,0255,4)While(体現式)語句(内部也可為空)特點:先判断体現式,後执行語句。原则:若体現式不是0,即為真,那么执行語句。否则跳出while 語句。,While(1),while(1)就是while(true),条件判断直接為true,循环永遠不會退出。也称為死循环。,5)delay()函数,是壹种延時函数。,两個for語句,构成了循环嵌套。用数数的方式消耗時间产生延迟效果。详细延迟多久取决于若干原因,後来再讨论。,void delay(),uint x,y;,for(x=100;x0;x-),for(y=600;y0;y-),;,注意:第二個for循环体是壹条空語句。,5)for循环,for(体現式1;体現式2;体現式3)語句(内部可為空)执行過程:1.求解壹次体現式1.2.求解体現式2,若其值為真(非0 即為真),则执行for中語句。然後执行第3步。否则結束for 語句,直接跳出,不再执行第3步。3.求解体現式3.4.跳到第2步反复执行。,三、流水灯:從D0-D7依次點亮,分析:,D0亮 0 xfe 11111110,D1亮 0 xfd 11111101,D2亮 0 xfb 11111011,D3亮 0 xf7 11110111,D4亮 0 xef 11101111,D5亮 0 xdf 11011111,D6亮 0 xbf 10111111,D7亮 0 x7f 01111111,软件分析:,1)依次把這8個值赋給P1口,延時壹段程序,void main(),while(1),P1=0 xfe;,delay(100);,P1=0 xfd;,delay(100);,P1=0 xfb;,delay(100);,P1=0 xf7;,delay(100);,P1=0 xef;,delay(100);,P1=0 xdf;,delay(100);,P1=0 xbf;,delay(100);,P1=0 x7f;,delay(100);,2)将0 xfe赋給P1口,然後使用移位函数来变化P1口的值,到达流水灯的效果,移位函数:,_crol_,_cror_:将char型变量循环向左(右)移動指定位数後返回。,_crol_,_cror_:c51中的intrins.h库函数,#include,#include,#define uint unsigned int,#define uchar unsigned char,uchar temp;,void delay(uint);,程序如下:,void main(),temp=0 xfe;,while(1),for(num=0;num0;x-),for(y=110;y0;y-),;,課後练习,請在keil环境下编写壹下程序:,1.點亮最终壹种LED,2.點亮1、2、5、6這四個LED,3.让第三個LED闪烁,4.设计出流水灯程序,從D7D0,
展开阅读全文