研究生单片机应用.ppt
单片机C语言构造数据类型,数组(也可以理解为矢量)下标从0开始一维数组 int a3=0,1,2二维数组 int a23=1,2,3,2,4,6 字符数组 char g8=E,A数组与储存空间,过大数组产生编译错 字符/整型/长整或浮点数组元素:1/2/4字节,注意Target选项卡中Memory Model的设定,单片机C语言构造数据类型,指针,把变量的地址放到另一个变量(称作指针)中,通过对这个特殊的变量进行操作,实现特殊的操作。变量的指针该变量的地址指向变量的指针变量存放别的变量的地址的专门变量,简称指针变量3.指针变量的定义 例5.2 指针变量基类型变化的影响 P1,单片机C语言构造数据类型,例5.3 指针变量基类型变化的影响 P24.指针变量的引用只存放地址 例5.4 通过指针变量访问整型变量 Point1int*Point1,*Point2 定义整型指针变量Point1=指定指针变量地址(*Point1)+相当于a+*Point1+相当于指向下一地址,单片机C语言构造数据类型,例5.5 区分热启动和冷启动。热启动,内部RAM数据值不变,将保存内存特定区域数据,回存相应的变量中;冷启动,内部RAM数据是随机值,要从外部EEPROM读取上次断电时保存的数据,回存相应变量中。STARTUP.A51(略),单片机C语言构造数据类型,Keil C51指针 a.基于存储器,由C语言代码中存储器类型决定,以存储器的类型为参量,编译时才被确定,高效地访问对象,只需12字节。idata*,data*,pdata*1字节 xdata*,code*2字节,单片机C语言构造数据类型,b.一般指针 3个字节,单片机C语言构造数据类型,例,指向地址1678H的xdata数据类型的一般指针,单片机C语言构造数据类型,存储器地址,单片机C语言构造数据类型,结构不同类型的数据组成整体 例,公交票价3个分量,起点、终点和价格 struct busprice unsigned char begin;unsigned char end;unsigned int price;,定义结构的类型,单片机C语言构造数据类型,先定义结构类型,再定义变量定义结构类型同时定义变量直接定义结构类型变量,定义结构类型变量,单片机C语言构造数据类型,结构不能作为整体赋值、存取、运算函数的参数和返回值。可以“&”取地址或“.”引用成员只有最低一级成员能够赋值、存取、运算。高级引用“”,最后级引用“.”结构类型变量的成员可以象普通变量进行各种运算。,引用结构类型变量,单片机C语言构造数据类型,共用体(union)变量共用内存,空间为最大成员的空间,任意时刻最多存放一个成员的数据,节省内存空间。好像餐厅一样,不同时间可以为很多人服务,同一时间只提供有限的服务空间 例5.6 浮点数存储 union,单片机C语言构造数据类型,枚举enum,指定整型变量取值,罗列所有的可取值。enum daySun,Mon,Tue,Wed,Thu,Fri,Satd1,d2;或 enum daySun,Mon,Tue,Wed,Thu,Fri,Sat;enum day d1,d2;枚举的定义,单片机C语言构造数据类型,枚举列表中每项代表一个整数,默认第1项为0,然后按自然数递增,也可人为初始化某项为一整数,其后依然自然数递增。enum wuxinggold,wood,water=6,fire,clay;例5.7 红、绿、蓝3色球全排列。Enum枚举变量取值,单片机C语言构造数据类型,设置参数,定义共用体变量,当中分量用枚举先到取值,同时表达清楚含义,方便编程和调试。union Para unsigned int Par6;unsigned char WrPar12;Set,Coun;enumT1,T2,R1,R2,R3,C1Par;,单片机C语言构造数据类型,Typedef 定义类型,声明新类型代替已有类型名。类型换名而已。仅声明,不定义变量;在编译时处理,define编译前处理;有利于程序通用和移植。,单片机内部资源的编程,中断,5个源,4个控制寄存器,2个优先级定时器,T0和T1,定时/计时,2个控制寄存器,4工作方式,初值串行口,2个独立全双工,SBUF地址99H,2个控制寄存器,单片机内部资源的编程,中断源(外部)/INT0,/INT1,由TCON寄存器低4位确定下降沿触发电平保持12振荡周期以上1机器周期12振荡周期,单片机内部资源的编程,中断源(内部)TF0/TF1:定时器T0/T1溢出,响应后硬件清零TI:串行口发送,响应后软件清零RI:串行口接收,响应后软件清零,单片机内部资源的编程,中断优先级,单片机内部资源的编程,中断控制寄存器(1)中断允许IE,单片机内部资源的编程,中断控制寄存器(2)中断优先级IP,单片机内部资源的编程,中断控制寄存器(3)外部源及触发TCON(低4位)IE1 IT1 IE0 IT0中断控制寄存器(4)串口收发SCON(低2位TI RI),单片机内部资源的编程,中断程序返回类型 函数名(参数)模式再入interrupt n using n 031 04,第n组 工作寄存器例6.1 按下k1,P1.0引脚LED亮/灭 int0,单片机内部资源的编程,定时器,T0/T1/,TMOD和TCON进行控制,由1到0负跳变,计数加1直至溢出,不占用CPU,与之并行工作,单片机内部资源的编程,定时器方式控制寄存器TMODTMOD只能字节寻址,8位整体写入。,单片机内部资源的编程,定时器方式控制寄存器TCON,低四位外部中断,高4位含义如下:,单片机内部资源的编程,定时/计数器工作方式方式0,13位定时/计数器 8+低5方式1,16位定时/计数器 双8方式2,自动再装入预置8位方式3,T0独立2个8位,T1关闭T/C2,看门狗,16位自动再装入,单片机内部资源的编程,定时/计数器初值:最大待计方式0,最大21389128K方式1,初值216待计方式2/3,初值256待计定时预置初值换算:定时(us)晶振(MHz)/12,单片机内部资源的编程,定时器编程,初始化例6.2 P1.0引脚LED亮灭/60ms晶振12MHz t1查询 60000*12/12=60000例6.3 中断方式例6.2,60ms t2中断例6.4 定时器长定时,闪/1S t3例6.5 2个LED同时闪 t4软件定时,定义静态变量,公约数,单片机内部资源的编程,计数器编程,显示、输出信号例6.6 T0计数显示 c1例6.7 计数报警 c2,单片机内部资源的编程,串行口,2个控制寄存器、1个地址、1个缓冲 SBUF、4种方式寄存器SCON,单片机内部资源的编程,串行口电源控制寄存器PCON,最高位SMOD1波特率提高1倍串行口工作方式0,同步移位寄存器输入/出,扩展并行I/O。RXD引脚I/O,TXD输出同步移位时钟,发送/接收前须软件清RI为0。波特率系统时钟/12,单片机内部资源的编程,串行口工作方式1,10位通用异步,1低为始、8数(低在前)、1高则止。发,写SBUF由TXD输出;收,REN=1,确认有效:RI=0&SM2=0/收到的停止位1,并写入RB8。,单片机内部资源的编程,串行口工作方式2,9位异步,共11位:1低始、8数(低前高后)1编程位、1高止。波特率2SMOD*fosc/64 发,协议软件设置TB8,写缓冲TXD出,送后置TI=1;收,REN1,RXD负跳变开始,RI=0&SM2=0/第9位=1确认有效装RB8,置RI=1,单片机内部资源的编程,串行口工作方式3,波特率可变之方式2版。波特率(方式1/3),由定时/计数器T1溢出率和SMOD决定:(SMOD=0/1)波特率=2SMOD溢出率/32溢出率=fosc/(12(2k-初值)初值=2k-2SMOD fosc/(384波特率)k=13/16/8,视T1工作方式0/1/2、3,单片机内部资源的编程,例6.8 PC机控制P1口,显示在8个LED,按下K1K2发送数字到PC机。T1工作于方式2(8位自动重装)发生波特率19200,串口工作于方式1,晶振11.0592MHz,TMOD=0 x20,T1工作于定时器方式2,SCON=0 x40,串口工作方式1,PCON的SMOD位1T1初值=28-211059200/384/19200=256-3=0 xfd s1,单片机接口C编程,数码管接口分共阴/阳两大类,字形码编码共阴/阳对应段管脚为高/低则亮,单片机接口C编程,共阳,“0”对应“FEDCBA”段亮,则对应的地址引脚为低,其他为高,从高位到低位(HA)得字形码:11000000C0H,单片机接口C编程,共阴,“0”对应“FEDCBA”段亮,则对应的地址引脚为高,其他为低,从高位到低位为:001111113fH另外,可以借助小玩意来帮忙。,单片机接口C编程,多位数码管节省引脚数目,用共阴/阳极来选位。假设不知引脚,怎样用万用表来测?,单片机接口C编程,静态显示数码管 相应段恒定亮/灭直至显示另一 符号。亮度高,编程简单,占 用较多I/O端口资源,不常用。74HC595与单片机串口组成静态数码管显示接口。,单片机接口C编程,图84,“CNT”应改为“RCK”一起看例8.1程序,串口初始化,定义显示缓冲和字形码(共阳),传送1字节数据函数,显示函数,主函数。,单片机接口C编程,动态显示数码管利用人眼视觉暂留,各位数码管的ah并联构成“字段口”,公共阴/阳接受I/O控制构成“位扫描口”。循环扫描分时轮流选通各位公共极,超过人眼25/秒就感觉同时发光。,单片机接口C编程,看图85,6位共阳数码管,P0段控制,通过三极管驱动位扫描各位的公共端。例8.2 动态显示程序,定时中断15位始终为0,第6位09循环 dled,单片机接口C编程,键盘接口软件置输入引脚为高,硬件上拉电阻拉高,按下为低,软件判键。软件去抖动,延时10ms/更长再检测例8.3 键控流水灯 key1,实践练习,Proteus设计动态扫描驱动电路Keil编辑、编译程序,生成.hex文档Proteus调用.hex文档仿真动态扫描显示修改电路和程序,加入按键控制数字显示功能并仿真,