1:通过外部中断0(1),中断5次,计数加一,并用数码管显示用单片机语言编程

1:通过外部中断0(1),中断5次,计数加一,并用数码管显示用单片机语言编程 2:通过外部中断0(1),中断一次,led灯右移一下用单片机语言编程 谢谢各位了

第1个回答  2014-03-25
1.
unsigned char js,nn,temp;
unsigned char code SMG[10]={0x3f,}; //数码管段码,根据实际情况选用
void InitWBZD0() interrupt 0
{
nn++; //每次中断,nn加1;
if(n==5) //中断5次,js加1,用作计数累计;
{
js++;
if(js>=10) //只计数0~9,自己可以修改;
js=0;
}
temp=SMG[js];
}

void main()
{
while(1)
{
P1=temp;
}
}

2.
unsigned char LED_DATA=0x01;
void main()
{
while(1);
}
void InitWBZD0() interrupt 0
{
P1=_cror_(LED_DATA,1);
}追问

不是这个是用单片机语言像org 0000h… mov a,#40h那种的

用keil …软件编的语言

第2个回答  2014-03-26
设计程序,先要确定电路。

光说两个引脚《外部中断0(1)》,不够用的。
第3个回答  2014-03-26
DAT EQU 30H
SCANLED EQU 32H
FSDAT EQU 33H
LSDAT EQU 34H
NUM EQU 35H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXT0
ORG 000BH
LJMP T0ISR
ORG 0013H
LJMP EXT1
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#01H
MOV TH0,#0F4H
MOV TL0,#048H
MOV P2,#00H
MOV SCANLED,#0
MOV 30H,#0
MOV 31H,#0
MOV FSDAT,#0
MOV LSDAT,#0FEH
MOV P1,#0FEH
MOV NUM,#0
SETB IT1
SETB IT0
SETB EX0
SETB EX1
SETB EA
SETB ET0
SETB TR0
SJMP $
EXT0:
JNB P3.2,$
INC NUM
MOV A,NUM
CJNE A,#5,EXT00
EXT00:
JC EXT0R
MOV NUM,#0
INC FSDAT
MOV A,FSDAT
CJNE A,#100,EXT01
EXT01:
JC EXT02
MOV FSDAT,#0
EXT02:
MOV A,FSDAT
MOV B,#10
DIV AB
MOV 30H,A
MOV 31H,B
EXT0R:
RETI
EXT1:
JNB P3.3,$
MOV A,LSDAT
RL A
MOV P1,A
MOV LSDAT,A
RETI
;--------------------
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#0F4H
MOV TL0,#48H
SETB TR0
MOV DPTR,#LEDTAB1
T000:
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T001
MOV P2,#02H
SJMP T0DIS
T001:
MOV P2,#01H
T0DIS:
MOV A,@R0
MOVC A,@A+DPTR
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
ANL A,#01H
MOV SCANLED,A
POP ACC
RETI
;--------------------
LEDTAB1:
DB 0C0H ;"0" 00H
DB 0F9H ;"1" 01H
DB 0A4H ;"2" 02H
DB 0B0H ;"3" 03H
DB 99H ;"4" 04H
DB 92H ;"5" 05H
DB 82H ;"6" 06H
DB 0F8H ;"7" 07H
DB 80H ;"8" 08H
DB 90H ;"9" 09H
DB 88H ;"A" 0AH
DB 83H ;"B" 0BH
DB 0C6H ;"C" 0CH
DB 0A1H ;"D" 0DH
DB 86H ;"E" 0EH
DB 8EH ;"F" 0FH
DB 0FFH ;" " 10H
;--------------------
END本回答被网友采纳

c51单片机按键每按一次同时数码管显示数字加一是什么?
\\x0d\\x0a用外部中断,\\x0d\\x0a每中断一次,中断服务程序将数组元素加一P0=Shuzu[ax++](或指针加一:P0=*P++)\\x0d\\x0a以上假设P0口驱动数码管!\\x0d\\x0a至于数码管使用的是共阳还是共阴,就把相对的数值存在数组中!\\x0d\\x0a-\\x0d\\x0a外部中断0的中断程序入口\\x0d\\x0avoid TI_0() interrupt ...

51单片机,用外部中断0和外部中断1实现:1个七段LED数码管显示值加1和...
给你讲思路吧,先设置外部中段,打开中断开关。主程序可以利用一个for循环,每有一次中断就操作一次数组(数组元素加一或减一(其中数组对应的是数码管1~9的显示))

单片机:采用外部中断0和1,控制两位数码管进行00~99的计数,其中外部中断0...
这好办!定义一个寄存器num,若是外中断0,则num--;若是外中断1,则num++;然后让num显示即可。

单片机编程 计算外中断0输入脉冲与外中断1输入脉冲的间隔时间(求C程序...
1、设置定时器0为100uS定时时间(看个人,你想要间隔时间分辨度高一点,就设置低一点),打开T0中断,暂时不计数。2、把外部中断0和1都设置为下降沿触发,打开INT0和INT1的中断 3、允许总中断。4、在INT0的中断服务程序里,当脉冲下降沿到来的时候,先定时器0的TH0和TL0清零,然后开始计数。5、在...

51单片机中断控制数码管显示
在51单片机中断控制数码管显示的应用中,通常的做法是将数码管显示的内容存储在单片机的内存中,然后通过中断服务程序来更新数码管的显示内容。当需要更新数码管显示内容时,单片机产生一个中断请求,然后执行相应的中断服务程序。在中断服务程序中,单片机读取内存中存储的显示内容,并通过相应的接口电路将内容...

51单片机,外部中断,和计数求解。在proteus上显示不了效果。
其中计数是方式3,8位自动重装,初值是255,。--方式3,没有自动重装功能。=== 另外,交换两个按键的功能,试试看:void clear_count() interrupt 0 \/\/改成 interrupt 1 { count=0;} void add_count() interrupt 1 \/\/改成 interrupt 0 { count=(count+1)%100;} ...

...数码管显示数据加1(数码管初始值为0,9加1 后显示0)。
P0 = 0x00;\/\/ 让数码管熄灭,否则会造成数字重叠 } void main( void ) { while(1) { if( Key == 0 ) { DelayNms(30); if( Key == 0 ) { Count += 1; Count = (Count>9)? 0 : Count; } while( !Key ); } Display( Count ); ...

单片机C51编程(C语言):1到100的求和显示,在数码管里显示出来.
void convert();void display();void delay();\/\/共阴:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F code unsigned char Led[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};uchar num,sw,gw;void main(){ num=0;while(1){ co...

...要求按一下中断开关数码管数字加1,加到9后回0
看看如下电路:汇编程序如下:ORG 0000H LJMP START INC P2 RETI START:SETB IT0 MOV IE, #81H SJMP END

通过外部中断实现一位数码管0~9显示。
include<reg51.h> unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};\/\/0~9的段码表 unsigned char n;void main(){ P0=tab[n];EA =1;EX0=1;IT0=1;while(1);} void int0() interrupt 0 { n++;if(n>9)n=0;P0=tab[n];} ...

相似回答
大家正在搜