




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务1检测模块设计与制作单片机技术与应用智能车间生产线计数系统设计与制作任务1检测模块设计与制作【基础任务要求】利用红外光电传感器检测产品进行计数,当计数值达到3时报警,并且每1秒钟信号灯闪烁一次。任务1检测模块设计与制作任务实现四步骤绘制控制电路图焊接硬件电路硬件设计调试控制电路调试控制程序软硬件调试仿真运行实物运行功能实现绘制流程图编程实现三个功能:检测计数、蜂鸣器报警、1秒定时软件设计01020304重点、难点难点STC89C52单片机时钟电路复位电路电源电路指示灯电路系统框图任务1检测模块设计与制作蜂鸣器电路红外光电传感器电路任务1检测模块设计与制作红外光电传感器时钟电路复位电路指示灯电路蜂鸣器电路任务名:检测模块设计与制作元件名称图片型号数量Proteus中的名称单片机芯片AT89C511用AT89C51代替STC89C52晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻0.1KΩ1RES电阻470Ω1RES电阻10KΩ1RES发光二极管1LED-RED红外光电传感器1用按钮button代替三极管1PNP蜂鸣器1BUZZER元器件选型硬件电路图任务1检测模块设计与制作硬件设计-绘电路细致规范严谨小锦囊电路绘制规范:用统一规定的元件符号尽量避免导线的交叉导线要求横平竖直设置元器件参数元件放在编辑区内元器件之间要用导线连接软件设计1重点、难点如何用红外光电传感器检测产品并计数?2重点如何实现报警功能?3重点、难点如何实现指示灯隔1秒闪烁?1.红外光电传感器原理小测试:当光电开关检测到前方有物体时,传感器输出(
)。当光电开关没有检测到物体时,传感器输出()。0
1
NPN型光电开关如何用红外光电传感器检测产品并计数?--用来检测物体有无的传感器检测计数功能编程思路开始定义光电传感器连接引脚定义蜂鸣器连接引脚定义指示灯连接引脚定义计数变量js计数变量加1判断计数变量js==3?调用报警功能函数计数变量js清零定义光电传感器连接引脚定义蜂鸣器连接引脚定义指示灯连接引脚判断光电传感器输入状态==0?定义计数变量jsYNN拼图小游戏Y①②③④⑤⑥⑦⑧⑨检测计数功能编程思路知识链接sbitIRIN=P3^6; //红外输入voidjishu()//计数函数{if(IRIN==0) //如果红外输入=0{delay(10); //延时10ms
if(IRIN==0){while(!IRIN);//松手检测……}}}例如:如何实现报警功能?蜂鸣器01给P1.3引脚低电平(响)延时给P1.3引脚高电平(不响)延时重复以上过程报警功能编程思路sbitbeep=P1^3;voidbaojing()//报警函数{beep=0; //蜂鸣器响delay(100);beep=1; //蜂鸣器不响delay(100);}如何实现报警功能?voiddelay(unsignedintz){unsignedintx,y;for(x=z;z>0;z--)for(y=110;y>0;y--);}软件设计3重点、难点如何实现指示灯隔1秒闪烁?知识链接2.定时计数器的结构知识链接结构2个16位T/C分别由8位计数器TH0、TL0、
TH1、TL1组成加“1”计数器控制寄存器TCON方式寄存器TMODT0T1
1.启动控制2.计满溢出控制1.选择定时计数器4种工作方式2.选择定时OR计数3.决定启动方式知识链接3.定时/计数器编程(以1秒为例)第1步:初始化,确定三要素(T0或T1、定时/计数功能、工作方式);(1)方式寄存器TMODGATEC/TM1M0GATEC/TM1M0LSBMSB(89H)TMOD控制T1控制T0门控位功能选择位工作方式选择知识链接GATEC/TM1M0GATEC/TM1M0T1T0TMODGATE:
门控位。设定T1、T0运行时是否受INT0、INT1引脚输入电平的控制。GATE=
0不受外部中断控制C/T=1受外部中断控制0为定时功能1为计数功能知识链接(2)定时计数器的工作方式1GATEC/TM1M0GATEC/TM1M0TMODT1T0方式1的特点:16位的定时计数器,由TH的8位和TL的8位组成。M1M0=01【小测试】采用12MHZ晶振单片机,用T0定时,采用方式1控制,请问TMOD的值是多少?知识链接工作方式工作方式1计数位数16位定时/计数器计数寄存器TH1高8位,TL1低8位或TH0高8位,TL0低8位最大计数值M216=65536初值计算公式X初值=M-T定时时间/T机器周期初值设置TH1=X初值/256TH0=X初值/256TL1=X初值%256TL0=X初值%256特点初值不可自动重载(2)定时计数器的工作方式1【小测试】采用12MHZ晶振单片机,用T1定时,采用方式2控制,请问TMOD的值是多少?知识链接工作方式工作方式2计数位数8位定时/计数器计数寄存器TL1(TL0)被定义为计数器TH1(TH0)被定义为赋值寄存器最大计数值M28=256初值计算公式X初值=M-T定时时间/T机器周期初值设置TH1=X初值/256TH0=X初值/256TL1=X初值%256TL0=X初值%256特点初值可自动重载(3)定时计数器的工作方式2知识链接控制程序:12MHZ用T0定时采用方式1控制voidmain(){
TMOD=0x01;//定时器工作方式
TH0=0xfc;//定时器初值
TL0=0x18;//定时器初值
TR0=1;//定时器0启动}voidtimer0() //1s定时{unsignedinti;for(i=0;i<1000;i++){ TH0=0xfc; TL0=0x18; TR0=1; while(!TF0); TF0=0;}}3.定时/计数器编程(以1秒为例)第2步:计算并设置定时计数初值假设定时1ms,循环1000次,实现1s延时。TH0=0xFCTL0=0x18单片机晶振12MHZ知识链接控制程序:12MHZ用T0定时采用方式1控制voidmain(){
TMOD=0x01;//定时器工作方式
TH0=0xfc;//定时器初值
TL0=0x18;//定时器初值
TR0=1;//定时器0启动}voidtimer0() //1s定时{unsignedinti;for(i=0;i<1000;i++){ TH0=0xfc; TL0=0x18; TR0=1; while(!TF0); TF0=0;}}(2)、控制寄存器TCONLSBMSB(88H)TCONTF1TR1TF0TR0IE1IT1IE0IT0T1、T0
启/停控制位T1、T0
溢出标志位“0”停止“1”启动“1”有溢出“0”无溢出可编程可控制“+1”工作“1”“0”记录有无溢出第3步:启动定时计数器3.定时/计数器编程(以1秒为例)第3步:启动定时计数器控制程序:用T0定时采用方式1控制voidmain()//定时器初始化{
TMOD=0x01;//定时器工作方式
TH0=0xfc;//定时器初值
TL0=0x18;//定时器初值
TR0=1;//定时器0启动}voidtimer0() //1s定时{unsignedinti;for(i=0;i<1000;i++){ TH0=0xfc; TL0=0x18; TR0=1; while(!TF0); TF0=0;}}3.定时/计数器编程(以1秒为例)第4步:计数溢出处理(查询和中断两种方式)3.定时/计数器编程(以1秒为例)第4步:计数溢出处理(查询和中断两种方式)定义循环变量i给循环变量i赋初值i<1000?定时计数器赋初值启动定时计数器YN等待TF0=1TF0=0开始结束延时函数流程图i++voidtimer0(){unsignedinti;for(i=0;i<1000;i++){
TH0=0xFC; TL0=0x18;TR0=1;
while(TF0==0){;}
TF0=0;}}
查询方式
while(TF0==0){;//空语句}TF0=0;while(!TF0)知识链接voidtimer0(){unsignedinti;for(i=0;i<1000;i++){TH0=0xFC;
TL0=0x18; TR0=1; while(!TF0); TF0=0;}}
如何用定时计数器编程实现2秒延时?
如何修改程序呢?【举一反三思维训练】程序代码编写规范:1.字母大小写一致2.标点符号必须在英文状态下输入3.遵循变量命名规则4.注意TH0、TL0、TF0、TR0TH1、TL1、TF1、TR15.注意循环语句的格式勤勉创新坚持【定时计数器编程小结】确定TMOD的值确定定时时间,计算初值,确定循环的次数
启动定时计数器第一步第二步第三步第四步
计数溢出处理(查询方式)#include<reg51.h>//51单片机头文件sbitIRIN=P3^6;//红外光电传感器sbitbeep=P1^3;//蜂鸣器sbitled=P1^7;//信号灯voidjishu();//计数函数声明voidbaojing();//报警函数声明voidtimer0();//1秒定时函数声明voiddelay(unsignedintz);//延时函数声明voidled1();//指示灯闪烁函数声明voidjishu()//计数函数{unsignedintjs;
if(IRIN==0)
//如果红外输入=0{delay(10); //延时10msif(IRIN==0){
while(!IRIN);//松手检测
js++;//计数变量加1if(js==3)//当计数值等于3时,蜂鸣器响{baojing();//调用报警函数js=0;//计数变量清0}}}}voidbaojing() //报警函数{beep=0; //蜂鸣器响
delay(100);//调用延时函数beep=1; //蜂鸣器不响
delay(100);//调用延时函数}voidtimer0() //定时1s函数{unsignedinti;for(i=0;i<1000;i++){TH0=0xFC; TL0=0x18;TR0=1;while(TF0==0){;}TF0=0;}}voiddelay(unsignedintz) //延时函数{unsignedintx,y;for(x=z;z>0;z--) for(y=110;y>0;y--); }voidled1()//指示灯闪烁函数{led=0; timer0();//调用1秒函数 led=1;
timer0();//调用1秒函数}voidmain(){TMOD=0x01;TH0=0xFC; TL0=0x18;TR0=1;
while(1){
led1();
//调用指示灯闪烁函数
jishu();//调用计数函数}}知识链接如何用定时计数器方式2编程实现1秒延时?【举一反三思维训练】焊接注意事项:注意:先布局好位置,再焊接,确定好导线长度质量意识节约意识1.采用DIP40插座,方便芯片拔插2.注意电解电容和发光二极管都有正负极之分,在电路中不能接反3.晶振电路焊接时尽可能靠近单片机芯片,以减小电路板的分布电容,使晶振频率更加稳定4.器件分布时,要考虑为后面不断增加的器件预留适当的位置,且器件引脚不宜过高焊接小经验:1.元器件选择装配正确,位置适中。2.焊点完整、均匀、圆滑、光泽一致。3.板面清洁。4.电路板及焊盘无损坏。5.正确将电路板安装到产品上,位置合理。6.连线正确或安装工艺符合要求。电子装接工艺:每天学习一点点,变成更好的自己单片机技术与应用任务2计数模块设计与制作单片机技术与应用智能车间生产线计数系统设计与制作任务2计数模块设计与制作【基础任务要求】利用红外光电传感器检测产品进行计数,当计数值达到3时报警,并且每1秒钟信号灯闪烁一次。(用中断方式实现计数)任务2计数模块设计与制作任务实现四步骤绘制控制电路图搭接硬件电路硬件设计调试控制电路调试控制程序软硬件调试仿真运行实物运行功能实现绘制流程图编程实现三个功能:中断计数、蜂鸣器控制、1秒定时软件设计01020304重点、难点难点STC89C52单片机时钟电路复位电路电源电路指示灯电路系统框图任务2计数模块设计与制作蜂鸣器电路红外光电传感器电路任务2计数模块设计与制作红外光电传感器时钟电路复位电路指示灯电路蜂鸣器电路显示电路按键电路任务名:计数模块设计与制作元件名称图片型号数量Proteus中的名称单片机芯片AT89C511用AT89C51代替STC89C52晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻0.1KΩ1RES电阻470Ω1RES电阻10KΩ1RES发光二极管1LED-RED红外光电传感器1用按钮button代替三极管1PNP蜂鸣器1BUZZER元器件选型硬件电路图任务2计数模块设计与制作硬件设计-绘电路细致规范严谨小锦囊电路绘制规范:用统一规定的元件符号尽量避免导线的交叉导线要求横平竖直设置元器件参数元件放在编辑区内元器件之间要用导线连接软件设计2如何用中断方式编程实现1秒延时?重点、难点1如何用中断方式编程实现计数函数?重点、难点知识链接1.中断系统的结构知识链接
5个中断源2个优先级2个外部中断3个内部中断INT0(P3.2)INT1(P3.3)T0T1UART
与中断有关的特殊功能寄存器:IP:中断优先控制寄存器IE:中断允许控制寄存器TCON:定时/计数控制寄存器SCON:
UART控制寄存器中断标志寄存器可编程,可控MCS–51中断要点2.中断源及相关中断标志3.定时/计数器控制寄存器TCONTF1TR1TF0TR0IE1IT1IE0IT0
INT1
INT0触发方式控制位0
低电平触发1
边沿↓触发
INT1
INT0外部中断请求标志1
有有效触发时0
当CPU响应中断时T1T0溢出标志由硬件自动中断请求标志可编程控制位在每个机器周期S5P2都采样引脚P3.3P3.20记录有无中断0
当CPU响应中断时,也可由指令清除1
计数器“+1”有溢出时,并向CPU请求中断知识链接知识链接中断允许寄存器IE
EAESET1EX1ET0EX0INT0INT1T1T0UARTCPU0禁止1
允许0
禁止1
允许总中断
总中断中断中断IE(A8)中断的开放和禁止是可控,可编程的T2CPUIE的相应位被置“0”或“1”该相应中断即被“禁止”或“开放”4.中断控制寄存器voidtimer0() //定时1秒函数{unsignedinti;for(i=0;i<1000;i++){ TH0=0xFC; TL0=0x18; while(!TF0){;} TF0=0;} }voidmain() //主函数{TMOD=0x01;TH0=0xFC; TL0=0x18;
TR0=1;
EX0=1;EA=1;while(1){jishu();led=0;timer0();led=1;} }中断编程步骤开放中断源允许开放总中断源允许中断函数编程知识链接5.IP寄存器(优先级控制)知识链接例:设有如下要求,将T0、外中断1设为高优先级,其他为低优先级,求IP的值。IP的值:0x06在上例中,如果5个中断请求同时发生,求中断响应的次序。响应次序为:
定时器0-外中断1-外中断0-定时器1-串行中断11000000知识链接特定事件发生主程序主程序中断服务子程序断点中断源CPU6.单片机的中断过程中断请求中断响应中断服务中断返回中断请求中断响应中断服务中断返回知识链接7.中断源-一些特定的事件,也称中断请求信号知识链接8.中断服务程序
处理特定事件的一段程序。中断编程步骤开放中断源允许开放总中断源允许中断函数编程特定事件发生主程序主程序中断服务子程序断点中断源CPU红外光电传感器检测到产品中断响应计数产品,当产品数为3时,报警知识链接8.中断服务程序
处理特定事件的一段程序。知识链接8.中断服务程序处理特定事件的一段程序。voidjishu()interrupt0//计数函数{
unsignedintjs;if(IRIN==0) //如果红外输入=0{delay(10); //延时10msif(IRIN==0){while(!IRIN);//松手检测js++;if(js==3){ baojing();//调用报警函数 js=0;}}}}知识链接9.中断函数的定义在C语言程序中,中断函数使用关键词interrupt与中断号来定义中断函数,其一般形式如下:void中断函数名()interrupt中断号[usingn]{声明部分;执行部分;}知识链接中断源名称对应引脚中断入口地址C语言中断源服务程序入口外部中断0INT0(P3.2)0003H0定时/计数器0T0(P3.4)000BH1外部中断1INT1(P3.3)0013H2定时/计数器1T1(P3.5)001BH3串行口中断串行接收RXD(P3.0)串行发送TXD(P3.1)0023H410.中断函数的定义voidjishu()interrupt0//计数函数{
unsignedintjs;if(IRIN==0) //如果红外输入=0{delay(10); //延时10msif(IRIN==0){while(!IRIN);//松手检测js++;if(js==3){ baojing();//调用报警函数 js=0;}}}}知识链接中断函数与普通子函数有什么区别?中断函数是在发生中断时间后,主程序自动进入中断函数运行,运行结束后在退出中断函数,返回到进入中断函数之前的运行状态。普通的函数则需要主函数去调用。#include<reg51.h>sbitIRIN=P3^2;//红外光电传感器sbitbeep=P1^3;//蜂鸣器sbitled=P1^7; //信号灯voidbaojing(); //报警函数的声明voiddelay(unsignedintz);//延时函数的声明voidtimer0();//1秒定时函数voidled1();//指示灯闪烁函数的声明voidjishu()interrupt0//计数函数{unsignedintjs;if(IRIN==0) //如果红外输入=0{delay(10); //延时10msif(IRIN==0){while(!IRIN);//松手检测
js++;if(js==3){ baojing();//调用报警函数
js=0;}}}}如何用中断方式编程实现计数?知识链接voidbaojing()//报警函数{beep=0; //蜂鸣器响
delay(100);beep=1; //蜂鸣器不响
delay(100);}voiddelay(unsignedintz)//延时函数{ unsignedintx,y; for(x=z;z>0;z--) for(y=110;y>0;y--); }知识链接voidtimer0()
//定时1s函数{unsignedinti;for(i=0;i<1000;i++){TH0=0xFC; TL0=0x18; while(!TF0); TF0=0;} }voidmain()//主函数{TMOD=0x01;TH0=0xFC; TL0=0x18;EA=1;TR0=1;EX0=1;while(1){led1();} }voidled1(){led=0;timer0();led=1;timer0();
}程序代码编写规范:1.字母大小写一致2.标点符号必须在英文状态下输入3.遵循变量命名规则4.注意TH0、TL0、TF0、TR0TH1、TL1、TF1、TR15.注意循环语句的格式勤勉创新坚持知识链接【举一反三】如何用中断方式编程实现1秒定时?特定事件发生主程序主程序中断服务子程序断点中断源CPU1毫秒时间到中断响应循环1000次达到1秒知识链接#include<reg51.h>sbitIRIN=P3^6; //红外光电传感器sbitbeep=P1^3; //蜂鸣器sbitled=P1^7; //信号灯voidjishu(); //计数函数的声明voidbaojing(); //报警函数的声明voiddelay(unsignedintz);//延时函数的声明voidjishu()//计数函数{unsignedintjs;if(IRIN==0) //如果红外输入=0{delay(10); //延时10msif(IRIN==0){while(!IRIN);//松手检测
js++;if(js==3){ baojing();//调用报警函数
js=0;}}}}知识链接voidbaojing()//报警函数{beep=0; //蜂鸣器响
delay(100);beep=1; //蜂鸣器不响
delay(100);}voidtimer0()interrupt1 //定时1s函数{unsignedinti;for(i=0;i<1000;i++){TH0=0xFC; TL0=0x18; TR0=1; led=1;} }知识链接voiddelay(unsignedintz)//延时函数{ unsignedintx,y; for(x=z;z>0;z--) for(y=110;y>0;y--); }voidmain() //主函数{TH0=0xFC; TL0=0x18;ET0=1;EA=1;TR0=1;while(1){ led=0; jishu();} }小结正在运行的程序中断中断返回CPU收到中断信号中断服务程序执行结束,返回继续执行原程序CPU中断正在执行的程序,转到执行中断服务程序每天学习一点点,变成更好的自己单片机技术与应用任务3显示模块设计与制作单片机技术与应用智能车间生产线计数系统设计与制作任务3显示模块设计与制作【基础任务要求】利用红外光电传感器检测产品进行计数,当计数值达到3时报警,用LCD液晶屏显示产品数,并且每1秒钟信号灯闪烁一次。任务3显示模块设计与制作任务实现四步骤绘制控制电路图搭接硬件电路硬件设计调试控制电路调试控制程序软硬件调试仿真运行实物运行功能实现绘制流程图编程实现功能:用LCD液晶屏显示产品数软件设计01020304重点、难点难点STC89C52单片机时钟电路复位电路电源电路指示灯电路系统框图任务3显示模块设计与制作蜂鸣器电路红外光电传感器电路显示电路任务名:显示模块设计与制作元件名称图片型号数量Proteus中的名称单片机芯片AT89C511用AT89C51代替STC89C52晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻0.1KΩ1RES电阻470Ω1RES电阻10KΩ1RES排阻1RESPACK-8滑动电阻POT发光二极管1LED-RED红外光电传感器1用按钮button代替三极管1PNP蜂鸣器1BUZZER液晶屏LCD16021LM016L元器件选型LCD1602引脚硬件电路图任务3显示模块设计与制作硬件设计-绘电路细致规范严谨小锦囊电路绘制规范:用统一规定的元件符号尽量避免导线的交叉导线要求横平竖直设置元器件参数元件放在编辑区内元器件之间要用导线连接软件设计1如何用LCD1602液晶屏显示产品数?重点、难点知识链接1.LCD1602的基本操作RSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)使能端E引脚下降沿时执行操作四种操作三种常用单片机对LCD模块有四种基本操作:写命令、写数据、读状态和读数据写命令操作是指给液晶模块写入命令字,也就是指令字。读状态操作用来读入液晶模块的忙标志。写数据操作用来给液晶模块写入显示的数据。RSR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)四种操作三种常用一般一个独立的模块包括两个文件1)头文件,它里面定义所有液晶显示需要的预定义和函数声明;2)c程序源文件,液晶显示所需要的函数。模块化程序设计工程主函数模块main.c液晶显示模块lcd.hlcd.c定义lcd.h头文件#ifndef__LCD_H_#define__LCD_H_包含头文件#include<reg51.h>重定义关键字#ifndefuchar#defineucharunsignedchar#endif#ifndefuint#defineuintunsignedint#endif控制端口定义#defineLCD1602_DATAPINSP0sbitLCD1602_E=P2^2;sbitLCD1602_RW=P2^1;sbitLCD1602_RS=P2^0;函数声明voidLcd1602_Delay1ms(uintc);voidLcdWriteCom(ucharcom);//写命令函数voidLcdWriteData(uchardat);//写数据函数voidLcdInit(); //初始化函数#endif控制接口定义#defineLCD1602_DATAPINSP0sbitLCD1602_E=P2^2;sbitLCD1602_RW=P2^1;sbitLCD1602_RS=P2^0;在写操作时,使能信号E的下降沿有效。在软件设置顺序上,先设置RS和R/W状态,再设置数据,然后产生E信号的脉冲,最后复位RS和R/W状态。lcd.c#include"lcd.h"voidLcdWriteCom(ucharcom) { LCD1602_E=0; LCD1602_RS=0; LCD1602_RW=0;
LCD1602_DATAPINS=com;
Lcd1602_Delay1ms(1); LCD1602_E=1;//写入时序
Lcd1602_Delay1ms(5); LCD1602_E=0;}voidLcd1602_Delay1ms(uintc){uchara,b;for(;c>0;c--){for(b=199;b>0;b--){for(a=1;a>0;a--);}}
}写命令函数voidLcdWriteData(uchardat) { LCD1602_E=0; LCD1602_RS=1; LCD1602_RW=0;
LCD1602_DATAPINS=dat;
Lcd1602_Delay1ms(1); LCD1602_E=1; Lcd1602_Delay1ms(5); LCD1602_E=0;}写数据函数voidLcdInit()//LCD初始化
{
LcdWriteCom(0x38);//显示2行
LcdWriteCom(0x0c);//开显示不显示光标
LcdWriteCom(0x01);//清屏 LcdWriteCom(0x06);//写一个指针加1,光标移动设置 LcdWriteCom(0x80);//设置数据指针起点}LCD初始工作方式设置显示状态设置清屏返回输入方式设置001DLNF00DL:设置LCD的连接方式;DL=1:8位、DL=0:4位;N:设置LCD显示的行数;N=1:2行、N=0:1行F:用来设置LCD字符显示的点阵;F=1:5×10、F=0:5×7例:设置数据位数8位,2行显示,5×7点阵字符00111000
LcdWriteCom(0x38);//数据位数8位
//2行显示,5×7点阵字符化工作方式设置LCD初始工作方式设置显示状态设置清屏返回输入方式设置00001DCBD:整体显示开关,D=1,表示开显示,D=0,表示关显示C:光标开关,C=1,表示有光标显示,C=0,表示没有光标显示B:控制光标是否闪烁,B=1,光标闪烁,B=0,光标不闪烁例如:设置开显示,没有光标,光标位字符不闪烁
00001100
LcdWriteCom(0x0C);//开显示,没有光标,光标位字符不闪烁化显示状态设置试一试:写出设置开显示,有光标,光标位字符闪烁的命令字是什么呢?voidLcdInit()//LCD初始化
{
LcdWriteCom(0x38);//显示2行
LcdWriteCom(0x0c);//开显示不显示光标
LcdWriteCom(0x01);//清屏 LcdWriteCom(0x06);//写一个指针加1,光标移动设置 LcdWriteCom(0x80);//设置数据指针起点}LCD初始工作方式设置显示状态设置清屏返回输入方式设置LcdWriteCom(0x01);//LCD清屏,同时光标定位在第1行,第1列化清屏命令voidLcdInit()//LCD初始化
{
LcdWriteCom(0x38);//显示2行
LcdWriteCom(0x0c);//开显示不显示光标
LcdWriteCom(0x01);//清屏 LcdWriteCom(0x06);//写一个指针加1,光标移动设置 LcdWriteCom(0x80);//设置数据指针起点}LCD初始化工作方式设置显示状态设置清屏返回输入方式设置000001I/DSI/D:光标移动方向设置,I/D=1:增量方式右移、I/D=0:减量方式左移S:控制屏幕上所有文字是否移动,S=1:移位、S=0:不移位例如:设置光标增量方式右移,显示字符不移动
00000110
LcdWriteCom(0x06);
//光标增量方式右移,显示字符不移动输入方式设置voidLcdInit()//LCD初始化
{
LcdWriteCom(0x38);//显示2行LcdWriteCom(0x0c);//开显示不显示光标
LcdWriteCom(0x01);
//清屏
LcdWriteCom(0x06);//写一个指针加1,光标移动设置
LcdWriteCom(0x80);//设置数据指针起点}(1)表中命令字以十六进制形式给出,该命令字就是与LCD显示位置相对应的DDRAM地址。(2)第一行和第二行的命令字是不连续的。LcdWriteCom(0x80);//光标定位在第1行第1列voidLcdInit()//LCD初始化
{
LcdWriteCom(0x38);//显示2行LcdWriteCom(0x0c);//开显示不显示光标
LcdWriteCom(0x01);//清屏 LcdWriteCom(0x06);//写一个指针加1,光标移动设置 LcdWriteCom(0x80);//设置数据指针起点}LCD1602识别的是ASClI码,可以用ASCIl码直接赋值,在单片机编程中还可以用字符型常量或变量赋值进阶任务:LCD1602液晶屏显示【任务要求】用单片机控制LCD1602液晶模块,在第1行显示姓名拼音“xiaoming”字符串。在第2行正中间显示“ILoveChina!”字符串。每天学习一点点,变成更好的自己单片机技术与应用任务3显示模块设计与制作单片机技术与应用智能车间生产线计数系统设计与制作任务3显示模块设计与制作【基础任务要求】用LCD12864液晶屏显示“我爱你中国”。任务3显示模块设计与制作任务实现四步骤绘制控制电路图搭接硬件电路硬件设计调试控制电路调试控制程序软硬件调试仿真运行实物运行功能实现绘制流程图编程实现功能:用LCD12864液晶屏显示我爱你中国软件设计01020304重点、难点难点STC89C52单片机时钟电路复位电路电源电路系统框图任务3显示模块设计与制作显示电路任务名:显示模块设计与制作元件名称图片型号数量Proteus中的名称单片机芯片AT89C511用AT89C51代替STC89C52晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻10KΩ1RES排阻1RESPACK-8液晶屏LCD128641AMPIRE128×64元器件选型LCD12864引脚硬件电路图任务3显示模块设计与制作硬件设计-绘电路细致规范严谨小锦囊电路绘制规范:用统一规定的元件符号尽量避免导线的交叉导线要求横平竖直设置元器件参数元件放在编辑区内元器件之间要用导线连接软件设计1如何用LCD12864液晶屏显示”我爱你中国“重点、难点知识链接1.LCD12864的基本操作DIR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)使能端E引脚下降沿时执行操作四种操作三种常用单片机对LCD模块有四种基本操作:写命令、写数据、读状态和读数据写命令操作是指给液晶模块写入命令字,也就是指令字。读状态操作用来读入液晶模块的忙标志。写数据操作用来给液晶模块写入显示的数据。DIR/W操作00写命令操作(初始化、光标定位等)01读状态操作(读忙标志)10写数据操作(要显示的内容)11读数据操作(可以把显示存储区中的数据反读出来)四种操作三种常用一般一个独立的模块包括两个文件1)头文件,它里面定义所有液晶显示需要的预定义和函数声明;2)c程序源文件,液晶显示所需要的函数。模块化程序设计工程主函数模块main.c液晶显示模块lcd12864.hlcd12864.c定义lcd12864.h头文件定义lcd12864.c读忙状态函数功能:读LCD数据输人/输出口,读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)的状态。各位表示状态说明如下:BF=1;LCD内部正在执行操作;BF=0;LCD空闲,可对其操作。RST=1:LCD处于复位初始化状态;RST=0:LCD处于正常状态。ON/OFF=1:LCD处于关显示状态;ON/OFF=0:LCD处于开显示状态。定义lcd12864.c写命令函数定义lcd12864.c写数据函数定义lcd12864.c设置页地址指令功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。页地址就是DDRAM的行地址,存储在X地址计数器中,A2~A0可表示8页,读写数据对页地址没有影响。除本指令可改变页地址外,复位信号(RST)可把页地址计数器的内容清零。页地址初始化指令码:0xB8(设置在第0页)。如需设置在其他页,指令码可为:0xB8+页地址数。例如设置在第⒉页,指令码为0xBA,在编程中,为了设置页地址的方便,可以直接写为0xB8+2。
液晶显示模块带有1024字节的显示数据RAM(DisplayDateRAM),它储存着液晶显示器的显示数据,液晶屏会根据其中的内容进行显示。DDRAM单元中的一位对应于显示屏上的一个点,如某位为“1”,则与该位对应的LCD液晶屏上的那一点就会有显示。
KS0107(KS0108)控制器的DDRAM按字节寻址,因此为了使LCD显示屏的定位与KSO107(KS0108)的寻址相统一,将整个显示屏划分为左右两个半屏,每半屏是64×64个像素点,由一个KSO107(KS0108)控制器来控制。再把横向上的64个像素点编为0~63列,把纵向上的64个像素点分成8页,每页8行,这样每页的某一列的8行像素就对应了一个显示RAM单元,设置每个显示RAM单元的数据就可以控制整个显示屏的显示信息。DDRAM地址与显示位置映射表(半屏64×64)DDRAM地址映射表(全屏128×64)设置显示起始行指令功能:执行该命令后,所设置的行将显示在屏幕的第0行。显示起始行是由Z地址计数器控制的,该命令自动将A0~A5位地址送入Z地址计数器,起始地址可以是0~63范围内的任意一行。起始行初始化指令码:0xc0(回第0行)。定义lcd12864.c设置列地址指令功能:DDRAM的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DDRAM进行读写操作后,Y地址自动加1。列地址初始化指令码:0x40(设置在第0列)。定义lcd12864.c设置列地址指令功能:设置屏幕显示开/关。DBO=l,开显示;DBO=0,关显示。不影响显示RAM(DDRAM)中的内容。开显示指令码:0x3F;关显示指令码:0x3E。定义lcd12864.c定义lcd12864.c定义lcd12864.c定义main.c定义main.c定义main.c左右屏幕页(上下)列(左右)显示字【进阶任务要求】利用红外光电传感器检测产品进行计数,当计数值达到3时报警,用LCD12864液晶屏显示产品数,并且每1秒钟信号灯闪烁一次。任务3显示模块设计与制作任务实现四步骤绘制控制电路图搭接硬件电路硬件设计调试控制电路调试控制程序软硬件调试仿真运行实物运行功能实现绘制流程图编程实现功能:用LCD液晶屏显示产品数软件设计01020304重点、难点难点STC89C52单片机时钟电路复位电路电源电路指示灯电路系统框图任务3显示模块设计与制作蜂鸣器电路红外光电传感器电路显示电路【拓展任务要求】利用红外光电传感器检测产品进行计数,当计数值达到3时报警,用LCD12864液晶屏串行显示产品数,并且每1秒钟信号灯闪烁一次。任务3显示模块设计与制作串行和并行控制方式不一样,读写时序不同写操作时序(串行)每天学习一点点,变成更好的自己单片机技术与应用任务3显示模块设计与制作单片机技术与应用智能车间生产线计数系统设计与制作任务3显示模块设计与制作【基础任务要求】利用红外光电传感器检测产品进行计数,当计数值达到3时报警,显示产品数,并且每1秒钟信号灯闪烁一次(用中断方式实现)。任务3显示模块设计与制作任务实现四步骤绘制控制电路图搭接硬件电路硬件设计调试控制电路调试控制程序软硬件调试仿真运行实物运行功能实现绘制流程图编程实现功能:数码管静态和动态显示产品数软件设计01020304重点、难点难点STC89C52单片机时钟电路复位电路电源电路指示灯电路系统框图任务3显示模块设计与制作蜂鸣器电路红外光电传感器电路显示电路任务3显示模块设计与制作红外光电传感器时钟电路复位电路指示灯电路蜂鸣器电路显示电路按键电路任务名:显示模块设计与制作元件名称图片型号数量Proteus中的名称单片机芯片AT89C511用AT89C51代替STC89C52晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻0.1KΩ1RES电阻470Ω1RES电阻10KΩ1RES发光二极管1LED-RED红外光电传感器1用按钮button代替三极管1PNP蜂鸣器1BUZZER数码管共阳极数码管17SEG-COM-AN-BLUE共阴极数码管17SEG-COM-CAT-BLUE元器件选型硬件电路图任务3显示模块设计与制作硬件设计-绘电路细致规范严谨小锦囊电路绘制规范:用统一规定的元件符号尽量避免导线的交叉导线要求横平竖直设置元器件参数元件放在编辑区内元器件之间要用导线连接软件设计1如何用数码管静态显示产品数?重点、难点知识链接1.LED数码管静态显示静态显示:当数码管显示某一个字型时,相应笔划的发光二极管恒定发光。特点:亮度高知识链接1.LED数码管静态显示一位数码管的电路连接位选:固定连接到+5V或者地;-共阳极:COM端固定接+5V;-共阴极:COM端固定接地;段选:连接到单片机的一个I/O口。例如:P0口、P1口等。特点:8个段选要占用一个端口。知识链接LED数码管静态显示电路连接知识链接知识链接1.LED数码管静态显示unsignedintshumaguan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedchardisplay(unsignedcharxs)//显示函数{P2=shumaguan[xs];}voidjishu()//计数函数{unsignedintjs;if(IRIN==0) //如果红外输入=0{delay(10); //延时10msif(IRIN==0){while(!IRIN);//松手检测
js++;display(js);if(js==3){ baojing();//调用报警函数
display(js); js=0;
display(js); }}}}如果产品数达到4位呢?数码管动态显示四位一体共阴极数码管7SEG-MPX4-CC四位一体共阳极数码管7SEG-MPX4-CA知识链接动态显示是把各显示器的相同段选线并联在一起,由一个8位I/O控制,其公共端由其它的I/O口控制,然后采用扫描方法轮流点亮各位数码管,使每位数码管分时显示各自应该显示的字符。2.LED数码管动态显示特点:占用端口资源少,适用于连接多个数码管。段选端位选端3.动态显示的编程思路核心:逐位扫描显示位选:选中第一个数码管段选:输出相应字型码延时位选:选中第二个数码管段选:输出相应字型码延时……位选:选中第四个数码管段选:输出相应字型码延时00x3f延时时间足够短,利用人眼的视觉暂留效应voiddisplay(unsignedintxs){unsignedintsge,sshi,sbai,sqian;sge=xs%10;//拆分个位
sshi=xs%100/10;//拆分十位
sbai=xs%1000/100;//拆分百位
sqian=xs%10000/1000;//拆分千位
led4=0; //第一位打开
P2=shumaguan[sge];//送数据
delay(1); //延时
led4=1; //关显示
led3=0;P2=shumaguan[sshi];delay(1);led3=1;
led2=0;P2=shumaguan[sbai];delay(1);led2=1;led1=0;P2=shumaguan[sqian];delay(1);led1=1;}【进阶任务】数码管动态显示中国共产党成立时间【任务要求】用单片机控制一个八位的共阳极LED数码管显示中国共产党成立时间19210723。八位一体共阴极数码管7SEG-MPX8-CC-BLUE八位一体共阳极数码管7SEG-MPX8-CA-BLUE【拓展任务要求】利用红外光电传感器检测产品进行计数,当计数值达到3时报警,数码管动态显示产品数,并且每1秒钟信号灯闪烁一次。增加4个独立式按键,第1个按键功能为设置报警值,第2个按键功能为减按键,第3个按键功能为加按键,第4个按键功能为复位。【拓展任务】数码管移动动态显示国庆节【任务要求】单片机控制4位一体的数码管移动显示1001。1第1屏第2屏10第3屏100第4屏1001001第5屏第6屏01第7屏1每天学习一点点,变成更好的自己单片机技术与应用任务4通信模块设计与制作单片机技术与应用智能车间生产线计数系统设计与制作【基础任务要求】通过模拟企业智能车间药装生产线,甲单片机利用红外光电传感器检测药瓶并计数,然后把计数结果通过串口传送给乙单片机,并在乙单片机数码管显示药瓶数,当计到3个药瓶时,蜂鸣器报警,同时每1秒钟指示灯闪烁一次。任务4通信模块设计与制作任务实现四步骤绘制控制电路图搭接硬件电路硬件设计调试控制电路调试控制程序软硬件调试仿真运行实物运行功能实现绘制流程图编程实现功能:串行通信软件设计01020304重点、难点难点系统框图任务4通信模块设计与制作甲单片机乙甲单片机任务名:通信模块设计与制作元件名称图片型号数量Proteus中的名称单片机芯片AT89C511用AT89C51代替STC89C52晶振12MHZ1CRYSTAL电容22pF2CAP电解电容22μf/16V1CAP-ELEC电阻500Ω1RES按钮1BUTTON三极管1PNP发光二极管1LED-RED电阻220Ω1RES四位一体共阴极数码管17SEG-MPX4-CC锁存器274HC573元器件选型硬件设计甲单片机乙单片机硬件电路图【小锦囊】在单片机串行通信接口设计中,建议使用振荡频率为11.0592MHZ的晶振,可以计算出比较精确的波特率。在单片机与PC机的通信中,必须使用11.0592MHZ的晶振。软件设计1如何编程实现串行通信?重点、难点知识链接(1)串行通信:数据字节一位一位在一条传输线上逐个传送。传输线少,可利用电话网,但传送控制复杂。
1.什么是串行通信?8位顺次传送知识链接(2)同步通信与异步通信异步通信收、发设备使用各自时钟UART知识链接
以字符(构成的帧)为单位字符间是异步的字符内各位是同步的
数据格式:知识链接
同步通信发送方时钟与接收方时钟同步。既保持位同步,也保持字符同步。同步方法:知识链接2.串行通信的传输方向单工:单工是指数据传输仅能沿一个方向,不能实现反向传输。
单工
广播知识链接2.串行通信的传输方向半双工:半双工是指数据传输可以沿两个方向,但需要分时进行。半双工对讲机知识链接2.串行通信的传输方向全双工:全双工是指数据可以同时进行双向传输。全双工电话机知识链接3.传输速率与传输距离传输速率比特率:每秒钟传输二进制代码的位数波特率:每秒钟调制信号变化的次数,即每秒钟发送的位数,单位是:波特(Baud)。
波特率和比特率不总是相同的,但对于基带传输,比特率和波特率是相同的。知识链接3.传输速率与传输距离传输距离传输距离与传输速率的关系传输距离随传输速率的增加而减小。知识链接4.串行接口的结构及工作方式串口结构有两个物理上独立的接收、发送缓存器SBUF,它们占用同一地址99H;接收器是双缓冲结构;发送缓存器,因为发送时CPU是主动的,不会产生重叠错误。知识链接串口引脚知识链接串行通信的数据结构异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。知识链接TI=0RI=0工作方式寄存器SCONRI:接收中断标志位接收结束时,会由硬件置1,向CPU发出中断请求。(要由软件复位)TI:发送中断标志位发送结束时,会由硬件置1,向CPU发出中断请求。要由软件复位)TB8:用来存放发送的第9位。RB8:用来存放接收的第9位。REN:是串行接收允许位0时:允许串行接收1时:禁止串行接收知识链接SM2:多机通信控制位。因为多级通信是在工作方式2和工作方式3下进行的,因此SM2主要用在工作方式2和工作方式3。当SM2=0时:不论接收的第9位是0还是1,都接收数据,产生中断;当SM2=1时:只有在接收到的第9位为1时,才接收数据,并产生中断;而如果接收到的第9位为0时,则将接收到的数据丢弃,不产生中断。串行口的工作方式SM0SM1方式说明波特率000移位寄存器fosc/1201110位异步收发器(8位数据)可变10211位异步收发器(9位数据)fosc/64或fosc/3211311位异步收发器(9位数据)可变知识链接工作方式寄存器PCONPCON是没有位寻址的,也就是说不能直接操作SMOD要直接操作PCON寄存器。SMOD:是波特率是否加倍的选择位。0时:波特率不加倍。1时:波特率加倍。例如:SMOD=1×
PCON=0x80√知识链接波特率的概念波特率的定义是:串行口每秒钟发送的位数称为波特率。比如说2400的波特率就是每秒钟发送2400个位数。串行口的波特率是用定时器T1作为波特率发生器的,这是定时器自动设置在工作方式2(可自动重装初值)。波特率=(2*SMOD)/32*定时器T1的溢出率定时器T1的溢出率=单片机内部时钟频率
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度时尚服饰店门面房买卖协议
- 二零二五年度演出活动主办方观众免责协议模板
- 二零二五年度综合医院与专科医院双向转诊合作协议书
- 2025年度航空航天知识产权保护及保密合同
- 二零二五年度退股股权变更与风险控制协议
- 2025年度装修公司拖欠工资无劳动合同纠纷解决协议
- 二零二五年度金融科技内部股东股权转让合同范本
- 二零二五年度石英石采矿权转让合同
- 二零二五年度培训学校师资培训资料保密及保密期限合同
- 二零二五年度培训机构中途入股投资合作协议
- 越剧基本知识讲座
- 深圳中考自主招生简历
- 寿光金远东变性淀粉有限公司年产2万吨乳酸、丙交酯、聚乳酸项目环境影响报告表
- 美术社团活动记录
- (完整word版)Word信纸(A4横条直接打印版)模板
- 雨水管道水力计算表
- 医疗机构注销登记申请书
- GB/T 678-2023化学试剂乙醇(无水乙醇)
- 影视鉴赏-第一章-认识电影-课件
- 船舶坞修厂修工程单审批稿
- 教科版小学科学三年级上册《空气》单元解读与试教课件
评论
0/150
提交评论