74LS148实现优先权管理

0. 74LS148简介

74LS148是优先权编码器,其引脚图如图1所示,真值表如表1所示。

                    图1 74LS148引脚图

                                                                        表1   真值表

1. 任务

74LS148引脚GS接单片机引脚INT0,当有中断请求时,读取端口P2,查询优先权最高的中断源(闭合按键)的编号A2A1A0,并把编号在数码管上显示。不断查询,显示器显示的数字是优先权最高的中断源的编号。当P3.2引脚变为高电平,所有的中断请求都服务完毕,显示P,查询结束。

2. 电路图如图2所示。

  图2  电路图

3. 实现代码

#include <reg51.h>
unsigned char status;
bit flag;
sbit P27=P2^7;
sbit P32=P3^2;

/* 数组存放共阴极数码管段码  */
unsigned char code led_mod[]={0x3f,0x06,0x5b,0x4f,
                              0x66,0x6d,0x7d,0x07};
void service_int0(void) interrupt 0 
    {
        flag = 1;   //标志位为1有中断
    }
void main(void) 
    {
        IT0 = 1;        //中断设置
        EX0 = 1;
        EA = 1;
        P0 = 0x40;      //起始显示-
        P27=0;
        
       for(;;) 
       {
         if(flag) 
         {
            status = ~P2 & 0x07;//取反屏蔽高5位,获得中断源序号
            switch(status) 
            {
             case 0: P0 = led_mod[status]; break;
             case 1: P0 = led_mod[status]; break;
             case 2: P0 = led_mod[status]; break;
             case 3: P0 = led_mod[status]; break;
             case 4: P0 = led_mod[status]; break;
             case 5: P0 = led_mod[status]; break;
             case 6: P0 = led_mod[status]; break;
             case 7: P0 = led_mod[status]; break;
            } 
           if(P32==1) {flag=0;P0 =0x73;}
         }
      }
  }


4. 仿真

按键K0、K3和K7都按下时,显示编号7,如图3所示。

                         图3  显示闭合按键K7的编号7

当按键K7断开后,显示按键K3的编号3,如图4所示。

               图4  显示闭合按键K3的编号3

当按键K3断开后,显示按键K0的编号0,如图5所示。

        图5  显示闭合按键K0的编号0

当没有按键闭合时,INT0为高电平,显示字符P,如图6所示。

                图6  中断完成,显示字符P

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值