版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。(4)P3口介绍P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口。复位系统(5)上电复位电路AT89C51的上电复位电路如图4.2所示,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1µF。上电复位的工作过程是在加电时,复位电路通过电
容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。在如图的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。图4.2上电复位电路(6)手动复位电路手动按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。如图4-3所示,当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。图4.3手动复位电路(7)晶振系统晶振是给单片机提供工作信号脉冲的.这个脉冲就是单片机的工作速度.比如12M晶振.单片机工作速度就是每秒12M.单片机内部也有晶振,接外部晶振可以或得更稳定的频率。因为晶振与单片机的脚XTAL0和脚XTAL1构成的振荡电路中会产生偕波(也就是不希望存在的其他频率的波),这个波电路的影响不大,但会降低电路的时钟振荡器的稳定性,如图4.4所示。80C51型单片机内有一高增益反相放大器,按如图连接可构成自激振荡电路,振荡频率取决于石英晶体的振荡频率,范围可取1.2—12MHz,C01.C02主要起频率微调和稳定作用,电容值可取5—30Pf。图4.4晶振电路4.3.2控制电路介绍(1)按键机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。抖动时间的长短与开关的机械特性有关,一般为5~10ms,如图4.5所示。图4.5按键控制电路(2)LED电路LED显示器具有功耗低,接口控制方便等优点,能直接与单片机接口,可方便地实现各种不同的操作。16个发光二极管L1-L16分别接在单片机P0.0-P0.7,P2.0-P2.7。输出“0”,发光二极管亮。图4.6LED显示电路4.3.3Proteus电路仿真图图4.7电路原理图4.4软件设计4.4.1程序流程图开始开始读入四个开关状态判断开关状态灯依次向下移动、单、双数灯亮向中间亮循环前面三种无输入图4.9主程序流程图在主程序中,应该尽量的使得任务简化,不要让中断服务程序作过多复杂的任务,而要尽量把这些复杂的任务放到主程序中间去完成。中断流程如图所示。去抖功能:读入键值,存入地址,然后延迟10ms后,也就是一个很短的时间之后,再次读入一个键值,两次键值相比较,如果一样则不是因为外部原因抖动产生按键,如果不一样则说明是别的原因产生的按键抖动。这样的一个程序就可以去除因为抖动产生的错误输入信号。4.4.2软件程序及分析(1)主要程序分析:#include<reg51.h>//定义8051寄存器的头文件#include<intrins.h>//定义intrins.h函数#include<math.h>//定义数学函数#include<stdio.h>#defineu8unsignedchar//定义无符号字符#defines8signedchar#defineu16unsignedshort//定义无符号整型#defines16signedshort#defineu32unsignedint//定于无符号整型#defines32signedint#definefp32float//定义浮点数#definefp64double//双倍精度浮点数#defineINT8Uunsignedchar#defineINT16UunsignedintsbitK1=P1^0;//按键1sbitK2=P1^1;//按键2sbitK3=P1^2;//按键3sbitK4=P1^3;//按键4#defineKEY_CHK_TIM10//按键检测时间u8__g_key_value;//获取到按键的值跑马灯数组:codeu16dispcode[16]={ 0xfeff,0xfdff,0xfbff,0xf7ff,0xefff,0xdfff,0xbfff,0x7fff, 0xfffe,0xfffd,0xfffb,0xfff7,0xffef,0xffdf,0xffbf,0xff7f};双流水灯数组:codeu16dispcode1[16]={ 0xfe7f,0xfc3f,0xf81f,0xf00f,0xe007,0xc003,0x8001,0x0000, 0x7ffe,0x3ffc,0x1ff8,0x0ff0,0x07e0,0x03c0,0x0180,0x0000};定时器初始化函数:voidtime_init(void){ TMOD|=0x01; TH0=0xf8; TL0=0x2f;//设定定时器初值(65535-63535)大约60msTR0=1;//打开定时器 ET0=1;//开中断 EA=1; ES=1; }(2)跑马灯运行方式:voiddisp0(void)//调用前面的跑马灯数组{ u8i;//定义i for(i=0;i<16;i++) { P0=dispcode[i]>>8;//P0口运行第二行数组 P2=dispcode[i];//P1口运行第一行数组 delay_ms(100);//延时100ms }}(3)鸳鸯灯运行方式:voiddisp1(void){ delay_ms(100);//延时100ms P0=0xaa;//P0口8个LED单数亮 P2=0xaa;//P0口8个LED灯亮 delay_ms(100); P0=0x55;//双数灯亮 P2=0x55;//双数灯亮 delay_ms(100);//延时100ms}(4)双流水灯运行方式:voiddisp2(void){ u8i; for(i=0;i<8;i++) { P0=dispcode1[i]>>8;//P0口运行第二行数组,逐个点亮,向中间 P2=dispcode1[i];//P2口运行第一行数组,逐个点亮,向中间 delay_ms(100); } for(i=8;i<16;i++) { P0=dispcode1[i]>>8;//向两边亮 P2=dispcode1[i];//向两边亮 delay_ms(100);//延时100ms }}(5)按键扫描函数:voidkey_scan(void){static u16 k1_pre_kep_tim=0;//k1按键按下保持时间static u8 k1_press_flag=0;//k1按键按下标志static u8 k1_short_press_flag=0;//k1短按触发标志static u16 k2_pre_kep_tim=0;//k2按键按下保持时间static u8 k2_press_flag=0;//k2按键按下标志static u8 k2_pre_ctn_tim=0;//按键连续触发的间隔延时计数static u16 k3_pre_kep_tim=0;//k3按键按下保持时间static u8 k3_press_flag=0;//k3按键按下标志static u8 k3_pre_ctn_tim=0;//k1短按触发标志static u16 k4_pre_kep_tim=0;//k4按键按下保持时间static u8 k4_press_flag=0;//k4按键按下标志if(K1==1)//当按键松开为真{ k1_pre_kep_tim=0;//k1按键按下保持时间清零 k1_press_flag=0;//k1按键按下标志清零if(k1_short_press_flag==1)//短按标志为1{ k1_short_press_flag=0;//短按标志清零 __g_key_value=1;//触发1号短按键 } }elseif(k1_press_flag==0){ k1_pre_kep_tim++;//累加定时中断次数if(k1_pre_kep_tim>KEY_CHK_TIM){ k1_short_press_flag=1;//短按标志置1 }if(k1_pre_kep_tim>300){ k1_pre_kep_tim=0;//中断计数清零 k1_short_press_flag=0;//清除按键短按的有效标志 k1_press_flag=1;//自锁按键置位,避免一直触发 __g_key_value=11;//触发长按 }(6)主程序:if(con_f==1){ disp0();//只运行跑马灯 }if(con_f==2){ disp1();//只运行鸳鸯灯 }if(con_f==3){ disp2();//只运行双流水 }if(con_f==4){ disp0();//循环以上三种 disp1(); disp2(); } }}五、组装调试5.1硬件硬件包括MCS-51单片机,LED发光二极管,晶振,电容,开关,电源,电阻及导线。将所有硬件配齐,按电路原理图组装好电路,在电路板上一一对应,所有硬件准备就绪后,接通电源,软硬结合。首先用烧录软件给单片机芯片加载*.hex文件,等待加载完毕,运行电路。当按下K1时,跑马灯开始,16个LED灯从上到下逐个点亮,第一个灯亮,然后灭,然后每个间隔时间为100ms;当按下K2时,鸳鸯灯开始,16个LED灯先单数亮,然后双数亮,间隔时间也是100ms;当K3按下时,双流水灯开始,16个LED灯依次往中间移动,然后再依次往外移动,亮过的灯不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳动合同签订前的员工福利制度
- 临时客服人员聘用合同样本
- 足球场膜结构施工合同
- 超分子水杨酸换肤治疗
- 2022年大学水利专业大学物理下册期末考试试卷C卷-附解析
- 商业空地租赁合同范本
- 2022年大学电气信息专业大学物理二模拟考试试题A卷-含答案
- 餐厅包间地砖铺设合同
- IT行业销售精英聘用合同
- 通信工程监理聘用合同样本
- 农贸市场食品安全事故处置方案
- 单元三 注塑模具的使用(任务3 注塑模具的安装)
- 六年级语文总复习课《修改病句》修改课件市公开课一等奖省赛课获奖课件
- 承德永辉矿业集团有限公司红山咀铁矿矿山地质环境保护与土地复垦方案
- 餐厅食品安全保障
- 药品经营与管理大学生职业规划
- 抽屉原理上课课件
- 怀孕的hcg验血报告单
- 病房管理护理服务
- 应力的概念讲解
- JF-2023-合同中小学校校外供餐合同示范文本
评论
0/150
提交评论