51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > C51教程 > 详细内容
【吉林科技大学】第三章:89S51实践课题--多路开关状态指示
发布时间:2009/6/16  阅读次数:5047  字体大小: 【】 【】【

Lesson 4

1. 实验任务
如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。
2. 电路原理图
图4.3.1
3. 系统板上硬件连线
(1.            把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上;
(2.             把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上;
4.   程序设计内容
(1.             开关状态检测
对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。
(2.             输出控制
根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。
5. 程序框图

开始

读P1口数据到ACC

ACC内容右移4次

ACC内容与F0H相或

ACC内容送入P1口
4.3.2
6. 方法一(汇编源程序)
                                                                         ORG 00H
START:                                               MOV A,P1
                                                                           ANL A,#0F0H
                                                                           RR A
                                                                           RR A
                                                                           RR A
                                                                           RR A
                                                                           XOR A,#0F0H
                                                                           MOV P1,A
                                                                           SJMP START
                                                                           END
7. 方法一(C语言源程序)
#include <AT89X51.H>
unsigned char temp;
void main(void)
{
   while(1)
       {
           temp=P1>>4;
           temp=temp | 0xf0;
           P1=temp;
       }
}
8. 方法二(汇编源程序)
                                                                           ORG 00H
START:                                                 JB P1.4,NEXT1
                                                                           CLR P1.0
                                                                           SJMP NEX1
NEXT1:                                             SETB P1.0
NEX1:                                                   JB P1.5,NEXT2
                                                                           CLR P1.1
                                                                           SJMP NEX2
NEXT2:                                             SETB P1.1
NEX2:                                                   JB P1.6,NEXT3
                                                                           CLR P1.2
                                                                           SJMP NEX3
NEXT3:                                             SETB P1.2
NEX3:                                                   JB P1.7,NEXT4
                                                                           CLR P1.3
                                                                           SJMP NEX4
NEXT4:                                             SETB P1.3
NEX4:                                                   SJMP START
                                                                           END
9. 方法二(C语言源程序)
#include <AT89X51.H>
void main(void)
{
   while(1)
       {
           if(P1_4==0)
               {
                   P1_0=0;
               }
               else
                   {
                       P1_0=1;
                   }
           if(P1_5==0)
               {
                   P1_1=0;
               }
               else
                   {
                       P1_1=1;
                   }
           if(P1_6==0)
               {
                   P1_2=0;
               }
               else
                   {
                       P1_2=1;
                   }
           if(P1_7==0)
               {
                   P1_3=0;
               }
               else
                   {
                       P1_3=1;
                   }
       }
}
  
  

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[4]
  • 评论人:[匿名] 时间: [2012/1/5 21:38:42] IP:[66.166.118.1*]
  • jCiSRo , [url=http://pkbgcnkozheg.com/]pkbgcnkozheg[/url], [link=http://kbvvzsrmlsro.com/]kbvvzsrmlsro[/link], http://rfvushkwsutu.com/
  • 评论人:[匿名] 时间: [2012/1/4 0:04:38] IP:[118.195.132.4*]
  • GlSe1A , [url=http://iotomzbifgbi.com/]iotomzbifgbi[/url], [link=http://qnwzwslejjrs.com/]qnwzwslejjrs[/link], http://fbzmicjzeaet.com/
  • 评论人:[匿名] 时间: [2012/1/3 1:09:01] IP:[109.149.161.15*]
  • dQ2fwP <a href="http://grupvzhtlgwj.com/">grupvzhtlgwj</a>
  • 评论人:[匿名] 时间: [2012/1/2 18:55:41] IP:[111.1.20.1*]
  • Didnt know the forum rules aollwed such brilliant posts.

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号