单片机系统开发_单片机软件设计_第1页
单片机系统开发_单片机软件设计_第2页
单片机系统开发_单片机软件设计_第3页
单片机系统开发_单片机软件设计_第4页
单片机系统开发_单片机软件设计_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机软件设计单片机软件设计2022-3-4目录目录程序的编写、编译程序的编写、编译程序的下载程序的下载基础程序设计基础程序设计典型模块化程序典型模块化程序程序的编写、编译程序的编写、编译vKeil CKeil C环境设置环境设置创建项目1、基于AT89C52处理器2、新建源代码文件,并保存命名xxx.c3、右键点击“Source Groupxx”将.c “Add Files to Group ”程序的编写、编译程序的编写、编译v程序编写:程序编写:DemoDemo示例示例/*功能:IO口操作,点亮一个LED*/#include /包含头文件,包含特殊功能寄存器的定义sbit LED=P00;

2、/ 用sbit 关键字 定义 LED到P0.0端口/* 主函数*/void main (void) /此方法使用bit位对单个端口赋值 LED=1; /将P0.0口赋值 1,对外输出高电平 LED=0; /将P0.0口赋值 0,对外输出低电平,此时点亮了LED while (1) /主循环 /主循环中添加其他需要一直工作的程序 程序的编写、编译程序的编写、编译vKeil CKeil C环境设置环境设置Target:设置时钟晶振为12MHzOutput:选中Create HEX File选项, 编译后会生成Hex文件, 用于下载到单片机中。Debug:左侧配置软件仿真模式; 右侧配置硬件调试器仿

3、真。 (默认即可)程序的编写、编译程序的编写、编译v程序编译程序编译编译查看编译输出结果目录目录程序的编写、编译程序的编写、编译程序的下载程序的下载基础程序设计基础程序设计典型模块化程序典型模块化程序程序的下载程序的下载vSTC89C52STC89C52STC ISP下载器USB转串口可代替MAX232,给51单片机下载程序引出接口分别为:+5V,+3.3V,GND,TXD,RXD.(如果把(GND)接到设备的有电压的针脚上,加电可能会烧毁)需要安装USB转串口驱动,通常为340芯片组下载软件:STC-ISP-V4.83程序的下载程序的下载vSTC89C52STC89C52冷启下载:冷启下载:

4、1、使用下载软件发送下载命令2、给STC单片机上电(如果之前已经上电,就要断电再上电)3、STC单片机才能进入到下载状态不能下载?不能下载?检查线路是否接错ISP 接口电路与下载器接口电路电平冲突下载时下载速度太快程序的下载程序的下载vAT89S52AT89S52USB ASP / ISP通常为免驱型请实用带保险的USB下载器,以便保护电脑U口程序的下载程序的下载vAT89S52AT89S52USB ASP / ISP下载软件:AVR fighterProgisp目录目录程序的编写、编译程序的编写、编译程序的下载程序的下载基础程序设计基础程序设计典型模块化程序典型模块化程序基础程序设计基础程序

5、设计v 单片机程序框架单片机程序框架v whilewhile()()主主循环循环v 延迟函数延迟函数v IOIO操作操作v 中断操作中断操作v 基础电路模块控制基础电路模块控制u 蜂鸣器控制蜂鸣器控制u 独立按键输入独立按键输入u 继电器控制继电器控制u 步进电机控制步进电机控制u 数码管显示数码管显示u LCD1602LCD1602显示显示无单片机编程基础的同学,可简单理解,采用模块化、积木式搭建单片机系统代码基础程序设计基础程序设计v程序程序框架框架单片机程序主体结构:lWhile()大循环轮询式执行各任务l外部中断外部触发中断,如按键,执行某任务l定时器中断 固定间隔时间执行某任务#in

6、clude main() /首先进行IO、中断、定时器工作模式初始化 while(1) /轮询式执行任务 void ISR_Key(void) interrupt 0 using 1 /执行外部中断处理任务void Timer0_isr(void) interrupt 1 using 1 /执行定时器中断处理任务基础程序设计基础程序设计vwhile()while()主循环主循环while (1) /主循环 /主循环中添加需要一直工作的任务程序/任务一:led闪烁 LED0=0; /将P0.0口赋值 0,对外输出低电平 Delay(10000); /调用延时程序;用于改变闪烁频率 LED0=1;

7、 /将P0.0口赋值 1,对外输出高电平 Delay(10000);/任务二:/任务三:/* 延时函数,含有输入参数 unsigned int t,其值的范围是 065535*/void Delay(unsigned int t) while(-t);基础程序设计基础程序设计v延迟函数延迟函数估算延迟函数估算延迟函数/* uS延时函数,参数 unsigned char t,其值范围是 0255。晶振12M。大致延时 长度如下 T=t x 2+5 uS */void DelayUs2x(unsigned char t) while(-t);/* mS延时函数,参数 unsigned char t

8、,范围是 0255。晶振12M*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); 精确延时请使用汇编机器周期指令周期晶振频率基础程序设计基础程序设计vIOIO操作操作对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。51单片机总共有P0、P1、P2、P3四个8位双向输入输出端口,每个端口都有锁存器(即专用寄存器P0P3 )、输出驱动器和输入缓冲器。每个IO口有一个IO口寄存器Px,而且这个寄存器可以位寻址Px.n(

9、定义详见 reg51.h 或 reg52.h)基础程序设计基础程序设计vIOIO操作操作1、当P0作为I/O口使用时,特别是作为输出时,输出级属于开漏电路,接拉电流负载时必须外接上拉电阻才会有高电平输出;如果作为输入,必须先向相应的锁存器写“1”,才不会影响输入电平。2、P1、P2 和P3 口为准双向口, 在内部差别不大, 但使用功能有所不同。 P3第二功能各引脚功能定义:P3.0:RXD串行口输入P3.1:TXD串行口输出P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入P3.4:T0定时器0外部输入P3.5:T1定时器1外部输入P3.6:WR外部写控制P3.7:RD外部读控制

10、 P1口是用户专用 8 位准双向I/O口,具有通用输入/输出功能, 每一位都能独立地设定为输入或输出。当有输出方式变为输入方式时, 该位的锁存器必须写入“1”, 然后才能进入输入操作。 P2口是 8 位准双向I/O口。外接I/O设备时, 可作为扩展系统的地址总线,输出高8位地址, 与P0 口一起组成 16 位地址总线。 基础程序设计基础程序设计vIOIO操作示例操作示例i nclude sbit bv=P20;/定义位变量,关联P2.0管脚。sbit是数据类型 int main(void) unsigned char pv; /位操作,以P2口的第0位为例: bv=0;/直接对P2口的第0位管

11、脚输出低电平 bv=1;/ 直接对P2口的第0位管脚输出高电平 /总线操作输出数据,以P2口为例: P2=0 xaa;/直接赋值,P2口输出数据0 xaa /总线操作读取数据,以P2口为例: pv=P2;/直接读取P2口的数据放到pv变量 return 0; 基础程序设计基础程序设计v中断中断8051:5个中断源8052:6个中断源(+T2)中断号优先级中断源中断入口地址01 高外部中断00003H12定时器0000BH23外部中断10013H34定时器10018H4 5 低串口中断0023HC语言程序中可不关心该地址基础程序设计基础程序设计v中断中断主要与中断程序控制相关的寄存器:l 中断允

12、许控制寄存器IEl定时器控制寄存器TCONl串口控制寄存器SCONl中断优先控制寄存器IPl定时器工作方式控制寄存器TMODl定时器初值赋予寄存器(TH0/TH1,TL0/TL1)基础程序设计基础程序设计v中断中断1.中断允许控制寄存器中断允许控制寄存器IE :EX0(EX1):外部中断允许控制外部中断允许控制位位 EX0=1 外部中断0开关闭合 /开外部0中断 EX0=0 外部中断0开关断开ET0(ET1):定时中断允许控制位定时中断允许控制位 ET0=1 定时器中断0开关闭合 /开定时器中断0 ET0=0 定时器中断0开关断开ES: 串口中断允许控制位串口中断允许控制位 ES=1 串口中断

13、开关闭合 /开串口中断 ES=0 串口中断开关断开EA:总中断控制:总中断控制 (EA=1:开总中断):开总中断)基础程序设计基础程序设计v中断中断2.定时器控制寄存器定时器控制寄存器 TCON /控制外部中断和定时器控制外部中断和定时器中断中断外部中断:外部中断: IE0(IE1):外部中断请求标志位:外部中断请求标志位 当外部中断INT0(INT1)引脚出现有效的请求信号(接入低电平或下降沿信号时),此位由单片机自动置1,cpu开始响应,处理中断,而当入中断程序后由单片机自动置0. IT0(IT1):外部中断触发方式控制位外部中断触发方式控制位 /选择有效信号选择有效信号 IT0(IT1)

14、=1:脉冲触发方式,下降沿有效。 IT0(IT1)=0:电平触发方式,低电平有效。基础程序设计基础程序设计v中断中断2.定时器控制寄存器定时器控制寄存器 TCON /控制外部中断和定时器控制外部中断和定时器中断中断定时器中断定时器中断: TF0(TF1):定时器定时器/计数器溢出中断标志位计数器溢出中断标志位 当定时器、计数器计数溢出的时候,此位由单片机自动置1,cup开始响应,处理中断,而当进入中断程序后由单片机自动置0. TRO(TR1):定时器:定时器/计数器启动位计数器启动位 TR0(TR1)=1; 启动定时器/计数器 TR0(TR1)=0; 关闭定时器/计数器基础程序设计基础程序设计

15、v中断中断3.定时器工作方式定时器工作方式TMOD低半字节(D0/D1/D2/D3)用来控制定时器/计数器0高半字节(D4/D5/D6/D7)用来控制定时器/计数器1GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1C/T=0时为定时功能,C/T=1时为计数功能(引脚外部脉冲)M0、M1方式选择功能基础程序设计基础程序设计v中断中断4.定时器初值定时器初值TL0/TH0(以12M晶振,工作方式1,16位计数器为例,定时Xus) 1.时钟周期的时间t=1/12M=1/12 us 2.机器周期的时间T=12*1/12=1 us 3. 每机器周期计数器+1,所以计数器+1经过时间为 1

16、us 16为计数器要全部置1(即达到65535)+1后,溢出才会触发中断,所以初值=(65536-X) 4.将初值转化为16进制码,分别付给TH0和TL0 eg:所定时间5ms;初值=(65536-5000)=60536=EC78;TH0=0XEC; TL0=0X78;程序中常用赋初值算法:程序中常用赋初值算法: TH0=(65536-20000)/256; TL0=(65536-20000)%256;基础程序设计基础程序设计v中断中断5.串口控制寄存器串口控制寄存器SCON定时器中断:定时器中断: TI:串行口发送中断标志位串行口发送中断标志位 当单片机串口发送完一帧数据后,此位由单片机自动

17、置1,而当进入中断服务程序后是不会自动清0的, 必须由用户在中断服务中用软件清0. RI:串行口接收中断标志位串行口接收中断标志位 当单片机串口接收完一帧数据后,此位由单片机自动置1,而当进入中断服务程序后是不会自动清0的, 必须由用户在中断服务软件中用软件清0. 基础程序设计基础程序设计v定时器中断示例定时器中断示例void Init_Timer0(void) TMOD |= 0 x01; /使用模式1,16位定时器,“|”可使多个定时器互不影响 TH0=(65536-60000)/256; /赋初值 (定时60ms) TL0=(65536-60000)%256; EA=1; /总中断打开

18、ET0=1; /定时器中断打开 TR0=1; /定时器开关打开main() Init_Timer0(); while(1);/* 定时器中断子程序*/void Timer0_isr(void) interrupt 1 using 1 TH0=(65536-60000)/256; /重新赋值 TL0=(65536-60000)%256; LED=LED; /指示灯反相,可以看到闪烁Demo:定时器中断0基础程序设计基础程序设计v外部中断示例外部中断示例功能:通过中断接口P3.2连接的独立按键测试,P0口的LED灯反向,边沿触发main() P0=0 xaa; /P0口初始值 EA=1; /全局中

19、断开 EX0=1; /外部中断0开 IT0=1; /边沿触发(IT0=0电平触发) while(1) /在此添加其他程序 /*外部中断程序*/void ISR_Key(void) interrupt 0 using 1 P0=P0; /进入中断程序执行程序,/此时可以通过 EA=0指令暂时关掉中断 串口中断以后再介绍Demo:外部中断0边沿触发基础程序设计基础程序设计v发光二极管发光二极管LEDLED灌电流拉电流 ?控制负载,尽量使用低电平有效(上电初始化,所有IO为高电平)单个LED控制sbit led0 = P10;led0 = 0; /开灯led0 =1; /关灯整个P1口控制:流水灯u

20、nsigned char tmp=0 xfe;while(1) P1= tmp; delay(); tmp = (tmp1)|1); if(tmp=0 xff) tmp=0 xfe;低电平有效Demo:LED流水灯基础程序设计基础程序设计v蜂鸣器控制程序蜂鸣器控制程序9013驱动高电平有效sbit beer = P04;beer = 0; /鸣叫beer =1; /关闭通过不同的间隔时间,可以达到类似倒车雷达的效果void beer_freq (unsigned char t) beer = !beer; /鸣叫 or 关闭 DelayMs(t);Demo:蜂鸣器基础程序设计基础程序设计v独立

21、按键独立按键sbit KEY=P32; /定义按键输入端口sbit LED=P00; /定义led输出端口void main (void)KEY=1; /按键输入端口电平置高,输入模式while (1) /主循环 if(!KEY) /如果检测到低电平,说明按键按下,led点亮 LED=0; else LED=1; /如果按键未按下led灭 /上述4句可以用一句替代 LED=KEY; /主循环中添加其他需要一直工作的程序 这里未考虑软件去抖查询方式亦可用外部中断Demo:独立按键控制LED基础程序设计基础程序设计v继电器控制程序继电器控制程序低电平有效sbit relay= P00;relay

22、= 0; /常开闭合,外设接通电源relay =1; /常开断开Eg:按键S1控制继电器模块(低电平有效)sbit KEY=P32; /定义按键输入端口sbit RELAY=P00; /定义继电器控制端口void main (void) KEY=1; /按键输入端口电平置高 while (1) /主循环 /按键按下,继电器开关切换 if(!KEY) RELAY=!RELAY; 基础程序设计基础程序设计v步进电机步进电机Uln2003驱动步进电机1、拍数拍数:电机转过一个齿距角所需脉冲数,以四相电机为例:四相四拍运行方式:AB-BC-CD-DA-AB四相八拍运行方式: A-AB-B-BC-C-C

23、D-D-DA-A 2、步距角步距角:对应一个脉冲信号,电机转子转过的角位移用表示。减速电机减速电机28BYJ-48-5步进角度:5.625 x 1/64减速比:1/64*因为这个是带减速齿轮的(减速比1/64) ,最后输出轴上步进角是5.625/64=0.08789度。 *对于电机,是64个脉冲为一圈。对于输出轴,是4096个脉冲为一圈(6464)。电机转64圈,输出轴转1圈。实测512*4为一圈?基础程序设计基础程序设计v步进电机步进电机接线方式:IN1 - P00 IN2 - P01 IN3 - P02 IN4 - P03#define MotorData P0 /步进电机控制接口定义uc

24、har phasecw4 =0 x08,0 x04,0 x02,0 x01;/正转 电机导通相序 D-C-B-Auchar phaseccw4=0 x01,0 x02,0 x04,0 x08;/反转 电机导通相序 A-B-C-Duchar speed_delay;/顺时针转动void MotorCW(void) uchar i; for(i=0;i4;i+) MotorData=phasecwi; Delay_xms(speed_delay);/转速调节 /逆时针转动void MotorCCW(void) uchar i; for(i=0;i4;i+) MotorData=phaseccwi;

25、 Delay_xms(speed_delay);/转速调节 基础程序设计基础程序设计v数码数码管(管(4 4位一体共阴极)位一体共阴极)段选段选位选位选*缺少驱动电路模块,暂时无法在mini系统中实验基础程序设计基础程序设计v液晶屏液晶屏LCD1602LCD1602控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等80字节显示数据存储器DDRAM通常只用每行前16个DDRAM 地址:0X80 + 相对地址基础程序设计基础程序设计v液晶屏液晶屏LCD1602LCD1602读状态 输入:RS=L,RW=H,E=H 输出:DB0DB7=状态字 写指令 输入:RS=L,RW=L,E=下降沿脉冲,DB0

26、DB7=指令码 输出:无 读数据 输入:RS=H,RW=H,E=H 输出:DB0DB7=数据 写数据 输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据 输出:无 基础程序设计基础程序设计v液晶屏液晶屏LCD1602LCD1602判忙函数:读状态判忙函数:读状态 bit LCD_Check_Busy(void) DataPort= 0 xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0 x80); 输入:RS=L,RW=H,E=H 输出:DB0DB7=状态字基础程序设计基础程序设计v液

27、晶屏液晶屏LCD1602LCD1602写入命令函数写入命令函数 void LCD_Write_Com(unsigned char com) while(LCD_Check_Busy(); /忙则等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; 写地址命令写地址命令LCD_Write_Com(0 x80 + x); LCD_Write_Com(0 xC0 + x); 输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码输出:无基础程序设计基础程序设计v液晶屏液晶屏LCD1602LCD1602写入数据函数写入数据函数 v

28、oid LCD_Write_Data(unsigned char Data) while(LCD_Check_Busy(); /忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; 输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据输出:无基础程序设计基础程序设计v液晶屏液晶屏LCD1602LCD1602初始化函数初始化函数void LCD_Init(void) LCD_Write_Com(0 x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0 x38); DelayMs(5)

29、; LCD_Write_Com(0 x38); DelayMs(5); LCD_Write_Com(0 x38); LCD_Write_Com(0 x08); /*显示关闭*/ LCD_Write_Com(0 x01); /*显示清屏*/ LCD_Write_Com(0 x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0 x0C); /*显示开及光标设置*/ 基础程序设计基础程序设计v液晶屏液晶屏LCD1602LCD1602功能函数封装功能函数封装写入字符串函数 void LCD_Write_String(unsigned char x,unsigne

30、d char y,unsigned char *s) ;写入字符函数 void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);Demo:LCD1602显示目录目录程序的编写、编译程序的编写、编译程序的下载程序的下载基础程序设计基础程序设计典型模块化程序典型模块化程序典型模块化程序典型模块化程序v 传感器数据采集传感器数据采集v 数字量(开关量)数字量(开关量)v 数字量(总线式数字量(总线式:1-Wire/IIC/SPI/CAN:1-Wire/IIC/SPI/CAN)v 矩阵键盘矩阵键盘v 串口通信串口通信

31、v 窗口转无线窗口转无线v LCD12864LCD12864液晶显示液晶显示v NOKIA5110NOKIA5110液晶显示液晶显示v 红外解码红外解码典型模块化程序典型模块化程序v传感器传感器开关量开关量低电平有效低电平有效lMQ2烟雾检测模块 l光照强度传感器模块l声音检测传感器模块l震动检测传感器模块l湿度HR202模块模块l火焰检测传感器模块高电平有效高电平有效l人体感应模块Demo:传感器模块-开关量实质:直接读取IO电平灵敏度可调(蓝色电位器调节)预热2分钟典型模块化程序典型模块化程序v传感器传感器数字总线数字总线温度传感器DS18B20(1-Wire总线)Demo:温度采集(DS

32、18B20)Pin 名称注释1GND地2DQ数字信息输出端3VDD外界供电电源输入端,在寄生电源接线方式时接地典型模块化程序典型模块化程序v传感器传感器数字总线数字总线DTH11温湿度传感器(温湿度传感器(1-Wire总线)总线)功能:采集DHT11数据,显示到LCD1602上,超预定值报警LCD1602 数据端口P2 ,控制端口rs/rw/en:P05-P07DHT11 数据端口DO:P10报警输出端口: P00 低电平有效DHT11测试模块变量定义及函数封装:sbit rtio = P10 ;uchar data_byte;uchar RH,RL,TH,TL;void start();/开

33、始信号uchar receive_byte();/接收一个字节void receive();/接收数据Demo:温湿度采集(DHT11)典型模块化程序典型模块化程序v传感器传感器数字总线数字总线建议测量周期:60ms以上距离=高电平持续时间uSx声速340M/S / 2 =高电平持续时间uSx uS/58 cmDemo:超声波测距(LCD1602)典型模块化程序典型模块化程序v红外解码红外解码Demo:红外解码1838万能接收头P3.3口,中断方式按遥控器按键,液晶显示4组码值,分别是:用户码 用户码 数据码 数据反码Eg: BOLE-HORSE Code:1E-1E-00-FF典型模块化程序

34、典型模块化程序v红外套件红外套件Demo:无线遥控方向盘2272-M4非锁四路无线遥控遥控方向盘: UPLEFT RIGHT DOWN脚位名称功能说明1VT 输出状态指示2D3数据输出3D2数据输出4D1数据输出5D0数据输出65V电源正极7GND 电源负极8ANT接天线端典型模块化程序典型模块化程序v串口通信串口通信仅使用三根线即可TTL to TTL RS232 to RS232典型模块化程序典型模块化程序v串口通信串口通信参数:串口号 波特率 数据位 奇偶校验位 停止位 数据流控制典型模块化程序典型模块化程序v串口发送示例串口发送示例/* 初始化串口中断,timer 1, mode 2, 8-bit 重装*/void InitUART (void) SCON = 0 x50; / SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0 x20; / TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0 xF4; / TH1: 重装值可使用专用小工具计算 TR1 = 1; / TR1:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论