用C语言编程并仿真实现4个按键产生4个外部中断以4个LED点亮响应对应的外部中断 这个怎么搞啊 51单片机

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-05
用外部中断,按一次键,两个LED灯点亮,再按一次,两个LED灯熄灭,循环。用Keil(C语言)编译

#include "msp430x54x.h"
//************************************************************
void main()
{
WDTCTL = WDTPW + WDTHOLD; //关看门狗
P2DIR &= ~( BIT6 + BIT7); //P2.6 P2.7 设置为输入
P1DIR |= BIT0; //P1.0 设置为输出
P7DIR |= BIT7; //P7.7 设置为输出
P2REN |= BIT6 + BIT7; //上拉下拉电阻使能
P2OUT |= BIT6 + BIT7; //P2.6 P2.7 为上拉
P2IES |= BIT6 + BIT7; //P2.6 P2.7下降触发
P2IE |= BIT6 + BIT7; //P2.6 P2.7中断使能
P2IFG =0; //中断标志清除,防止配置过程中出现中断标志为1
_EINT(); //开总中断
LPM4; //进低功耗4
}


/*******************端口中断程序********************/

#pragma vector = PORT2_VECTOR
__interrupt void port2(void)
{
switch(P2IV)
{
case 0x0e: P1OUT ^= BIT0;break; //LED1 亮灭
case 0x10: P7OUT ^= BIT7;break; //LED2 亮灭
default :break;
}
}

可能原因是:
1、初始化不对。
2、没有满足触发条件。
举例如下:
#include
sbit led=P1^0;
void ext0() interrupt 0
{
led=~led;
}
main()
{
EX0=1;
IT0=1;
EA=1;
while(1);
}

51单片机只有2个外中断是P3.2 和 P3.3
可以用计数器再实现2个外中断(计数器0, P3.4和计数器1, P3.5)

4个按键分别接到P3.2--P3.5
4个LED随便接其它IO口

51单片机有四个中断?不是吧,这个不是很简单呀,并不要用到中断:
把p0的数据传给a,再a传给p1,这不就形成了对应嘛,就这么简单,还要什么中断呀、、
#include <reg52.h>
# define uint unsigned int
#define uchar unsigned char
main()
{
uchar a;
while(1)
{
a=p0;
p1=a;
}
}

四个中断?一个中断就够了吧,用一个中断,在中断中计数来实现。

能说明白的吗,最好有仿真图

  • 怎么样用C语言写51单片机4×4矩阵按键使之响应?
    答:这个是键盘函数,你参考一下,网上也有很多资料的 uchar keyscan(){ P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0){ delay(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){ temp=P3;switch(temp){ case 0xee:num=1;break;case 0xde:num=4;break;case 0xbe:num=9;break;case ...
  • 用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键...
    答:include<reg51.h> define uchar unsigned char;uchar LED1,LED2;uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar num=0;sec,key;void delay(unsigned int a){ unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);} void display(){ LED1...
  • ...控制开始暂停快速慢速的流水灯。需要用C语言编程。求大神帮助_百度...
    答:其实很简单的,随便使用一个定时/计数 器,使其工作在方式1(方便计算初值),然后写中断服务函数,使用_crol_()函数来反复循环做流水效果,然后在主函数最后写while(1),一直不停扫描键盘函数,然后键盘函数定义4个按键,开始:TRx=1,停止:TRx=0,至于快慢的控制你可以在中断函数里边写一个延时函数,...
  • 51单片机 c语言 如何用4个按键控制4个流水灯
    答:不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后:void light_water(){ num=1;for(a=0;a<8;a++){ P1.1=num<<1;delay(1000); //延时;keyboard();//执行时又不停...
  • 用单片机p2口扩展一个4*4键盘,用c语言实现按键识别程序
    答:return 0; //无键按下,返回0 } void getkey(void){ unsigned char key;key=kbscan();if(key==0){keyval=0xff;return;} switch(key){ case 0x11:keyval=7;break;case 0x12:keyval=4;break;case 0x14:keyval=1;break;case 0x18:keyval=10;break;case 0x21:keyval=8;break;case 0x...
  • 请问怎样实现c语言的模拟按键?
    答:调win32api函数SendMessage实现模拟按键 include <windows.h> ...SendMessage(hWnd,WM_KEYDOWN,键值,0);...其中hWnd是目标窗口的句柄 值是被宏定义过的,VK_ENTER回车,VK_ESC是ESC,VK_A是A键等 目标窗口句柄可以通过HWND hwnd=FindWindow("窗口名");获得 ...
  • 用C语言编写,单片机89C51控制,四个按键控制灯亮,用一个P3口控制8个LED...
    答:/*图片上的P3.3口不接,LED 正端接个470欧电阻到5V电源,LED负端接P3口*/ include"c51.h"include"stdio.h"define Key0 P1^0 define Key1 P1^2 define Key2 P1^3 define Key3 P1^4 define LED0 P3^0 define LED0 P3^1 define LED0 P3^2 define LED0 P3^...
  • ...键盘输入数字并在LCD1602上显示出来的C语言程序
    答:这个你看看可以参考!include<reg51.h> include<intrins.h> define uint unsigned int define uchar unsigned char uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};//这三个引脚参考资料 sbit E=P2^7;//1602使能引脚 sbit RW=P2^6;//...
  • 想用C语言制作个随机按键,取种子数abcdef,让他随机一次,下一次剩5个...
    答:给你个代码参考下:include <stdio.h> include include <stdlib.h> int main(){ int a[] = { 1,2,3,4,5,6 };int cnt = sizeof(a) / sizeof(int);int i,j,c;srand(time(0));for (i = 0; i < cnt; ++i){ c = rand() % (cnt - i);for(j=0;j<cnt;++j){ i...
  • 我想要用c语言编写一个双层菜单 就是按一个键 然后进入一种工作模式...
    答:你好!比如说有A、B、C、D四个按键,把A当成功能键,当单击A键后进入A1模式,ABCD有4种功能;当双击A键后进入A2模式。同理B、C、D也可以这样做。或者使用组合键。你试试!