我是自己做的板,一开始时数码管是亮的,当有中断请求的时候数码管停止,让 led灯亮,这程序应该怎么写啊 ,我之前有用定时器写过,但是数码管不会停。另外我还想问下这个led灯要怎么接在单片机上,是接在中断的那个P3.2口吗?然后另外一个接电源,那是不是直接给P3.2一个低电平,就中断了,灯就亮了,但是我试了还是不亮的,所以不知道要怎么接,求解。
我是4位的数码管,位选在P1口,段选在P0口。
使ç¨æ¹æ³ï¼
åçæºçP2.5ï¼P2.6ï¼P2.7å£åå«æ¥ä¸ä½å¨ææ°ç 管çä½é端ï¼P0å£æ¥å¨ææ°ç 管ç段é端ãç¶åï¼P1.0å£æ¥ä¸ä¸ªçµé»ä¸²èä¸ä¸ªLEDç¯ç¶åæ¥å°ï¼çµé»å200~470欧ä¹é´å°±è¡ï¼æ¯ä¸ä¸ªéæµçµé»ã
ä¸æç¨çæ¯å¤é¨ä¸æ0ï¼è¦è§¦åä¸æçæ¶åï¼å°±ç¨ä¸æ ¹æé¦çº¿ä¸ç«¯æ¥å°ï¼ä¸ç«¯æ¥å°åçæºçP3.2å£å°±è¡ï¼è¿æ ·ï¼å°±æ»¡è¶³äºä½ çè¦æ±äºã
å¤é¨ä¸æç触åæ¹å¼æä½çµå¹³è§¦ååä¸é沿触åãå°åºæ¯é£ç§è§¦åæ¹å¼ï¼è¦è®¾ç½®ä¸æå 许å¯åå¨ä¸IT0çå¼ï¼å¦æIT0=0ï¼åæåçç¨åºï¼å°±æ¯ä½çµå¹³è§¦åï¼å¦æ为1ï¼å°±æ¯ä¸é沿触åã
ç¯ä¸æ¯ä¸å®è¦æ¥å°P3.2å£ä¸çãä¸æè¦æ§è¡çä»»å¡æ¯å¨ä¸æå½æ°ä¸å代ç æ§å¶çï¼å°±åæåç代ç ä¸ï¼ä½ åªéè¦æ§å¶LEDç¯æ¥çé£ä¸ªIOå£å°±è¡äºã
代ç å¦ä¸ï¼
#include
#define uchar unsigned char
sbit led=P1^0;
uchar code duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code wei[3]={0x06,0x05,0x03};
void delay(uchar c);
void ini_() //åå§åå½æ°ï¼è®¾ç½®ä¸æ触åæ¹å¼ï¼å¼ä¸æ
{
EA=1;
IT0=0;
EX0=1;
}
void main()
{
uchar i;
ini_();
led=0; //ç±äºåçæºä¸çµä¹åï¼ææçIOå£é»è®¤æ¯é«çµå¹³ï¼èè¦æ±æ¯å¼å§ä¸äº®ï¼æ以è¦å°P1.0å£å¼å§è®¾ç½®ä¸ºä½çµå¹³ã
while(1)
{
for(i=0;i<3;i++) å¨ææ°ç 管éªç
{
P2=wei[i];
P0=duan[i];
delay(35);
}
}
}
void led_() interrupt 0 //å¤é¨ä¸æ0å½æ°ï¼ä¸æå½æ°ä¸éè¦ç³æ
{
uchar i;
led=1; //å¨ä¸æä¸è®©ç¯äº®èµ·æ¥
while(1)
{
for(i=0;i<3;i++)
{
P2=wei[i];
P0=duan[i];
delay(1);
}
}
}
void delay(uchar c)
{
uchar a,b;
for(c;c>0;c--)
for(a=38;a>0;a--)
for(b=80;b>0;b--);
}
嗯 就是让数码管停止就好了,好像用外部中断有点麻烦啊。我后来改成用定时器来做,就可以了,但是我要是把数码管和led灯放在一起一个中断程序里,就不行了啊 这是为什么?
追答用定时器是每隔一定的时间让数码管和LED轮流显示么?
追问是啊
追答我不知道你是怎么写的,你可以设置一个标志位(比如i)当每有一次定时中断(或者几次中断)后就将i取反;在主循环里判断i,当i为1时让数码管显示,i为0时让LED显示。
追问#include #include #define uchar unsigned char #define uint unsigned int uchar code table[]={0xf9,0xa4,0xb0,0x99}; uchar n,i,t; sbit duan=P2^6; void delay(uint z) { uint x,y;
#include #include #define uchar unsigned char #define uint unsigned int uchar code table[]={0xf9,0xa4,0xb0,0x99}; uchar n,i,t; sbit duan=P2^6; void delay(uint z) { uint x,y;
关于51单片机的外部中断使用方法
中断用的是外部中断0,要触发中断的时候,就用一根杜邦线一端接地,一端接到单片机的P3.2口就行,这样,就满足了你的要求了。外部中断的触发方式有低电平触发和下降沿触发。到底是那种触发方式,要设置中断允许寄存器中IT0的值,如果IT0=0,像我写的程序,就是低电平触发,如果为1,就是下降沿触发...
C语言中,51单片机怎么将进入外部中断服务程序,
在进行51单片机的外部中断初始化时,我们首先需要开启中断源。对于外部中断0来说,需要执行"EX0 = 1",以开启中断功能。此外,我们还需要设置中断触发方式。若是外部中断,应将IT0值设为1,即设置为边沿触发方式,具体代码为"IT0 = 1"。为了确保中断系统正常工作,我们还需要开启总中断,通过设置"EA ...
如何使用外部中断?
要实现4个独立按键的中断,可以采用外部中断的方式。在51单片机中,可以通过P3口的外部中断请求(P3.2-P3.5)实现多个独立按键的中断响应。具体实现方法如下:1. 首先需要将P3.2-P3.5设置为输入模式,并使能中断请求。2. 在程序中,需要编写中断服务函数,用于处理按键中断事件。当某个按键按下时,...
51单片机外部中断的触发方式
51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。这个...
MCS-51单片机外部中断的触发方式如何设定和选择
2、导入51单片机的头文件,否则后续使用的端口都会出现未定义的情况,然后在主函数中,使得EA=1,即总中断允许,打开中断的总开关。3、分别打开外部中断0和外部中断1的分开关,即EX0=1和EX1=1,同时设置中断的触发方式为跳沿触发,可以避免增加额外的电路。4、如果不添加别的代码的话,此时这两个中断...
51单片机中的外部中断有什么作用?
51单片机外部中断使用方法:1、51单片机的外部中断int0对应的引脚为p3.2。2、设置寄存器,打开终端并选择中断的触发方式。EA为整体中断允许位,首先要将EA置1,打开中断。EX0为外部中断INT0,置1开启。IT0寄存器:置0为低电平触发,置1为下降沿触发。3、编写中断函数,int0的中断编号为0,这里使用中...
想用51单片机的外部中断0设置单片机的空闲或者掉电模式,同时再用该中...
单片机进入空闲模式的方法:PCON |= (1<<0);单片机进入掉电模式的方法:PCON |= (1<<1);单片机允许外部中断0的程序:EX0 = 1;IT0 = 1;\/\/---IT0 = 0也可以,前者是下降沿触发,后者是低电平触发,随便你.EA = 1;如果你允许了外部断0中断,那么,即使单片机进入空闲模式,一旺有中断,单片机就...
如何用C51单片机外部中断测量电机转速?
使用计时器,在产生一个中断的时候读取计时器的数值,在下次中断的时候再次读取计时器数值,这两个时间的差就是转一圈的时间,从而计算出速度。也可以多转几圈计算其平均值。
c51单片机如何使用中断
0关1开,按键接P3.3用这个 \/\/默认情况下,直接使EX0=1或EX1=1来打开中断,INT0、INT1中断是电平触发的 while(1){ \/\/主程序写这里 }}\/** 外部中断0服务程序,按下接P3.2的开关k=0下面程序被执行 **\/int0()interrupt 0{ \/\/程序代码写这里面 } \/** 外部中断1服务程序,按下...
51单片机,用按键实现外部中断,软件如何去抖?
外部中断的一般都是采用延时程序,而且延时程序一般是利用定时器做10~15ms的延时去抖,来实现的,而且时间不是特别精确,单片机书上和有关资料上应该都有我写一个参考一下:void DelayMS(unsigned char a){int i;for(;a>0;a--)for(i=110;i>0;i--);}延时约为a毫秒,不过不够准确,可以通过...