用按键控制数码管(摁一次加一或减一)用外部中断 c语言程序

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula =P2^6;
sbit wela=P2^7;
sbit key1=P3^6;
sbit key2=P3^7;
uchar num;
int a;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
void display(uchar numdis)
{
uchar shi ,ge;
shi=numdis/10;
ge=numdis%10;

dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);

dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

void scan()
{
if(key1==0)
{
num++ ;
if(num==99)
num=0;
while(!key1);
}

if(key2==0)
{
if(num==0)
num=99;
num--;
while(!key2);
}}

void main()
{
IT0 = 1;
EA=1;
EX1=1;
while(1)
scan();
....
}

你写的上面有好几个错误,中断你打开的是外部中断1,那你为就应该把IT0=1;改为IT1=1;同时延时程序在前面声明应为void delayms(uint xms);main函数里你也应该把scan()放到while(1)里面。追问

那中断函数怎么写呀?帮我写一个完整的吧,谢谢。帮我发邮箱吧,rzsjw@163.com.谢了

追答

已发到你邮箱请查收。

温馨提示:内容为网友见解,仅供参考
无其他回答

用外部中断每发生一次,共阴数码管上显示的数值加1或减1
程序如下:ORG 0000H JMP START ORG 0003H JMP X0_INT ORG 0013H JMP X1_INT ;--- START:SETB IT0 SETB IT1 MOV IE, #85H MOV R2, #0 MOV DPTR, #TABLE ;--- M_LOOP:MOV A, R2 MOVC A, @A + DPTR MOV P2, A SJMP M_LOOP TABLE:...

单片机AT89C51用C语言编,两个按钮分别控制一个数码管加减数,最好...
EX1=1;IT0=1;IT1=1;EA=1;while(1);}

用两个按键控制数码管一个加一个减 都是按一下一加 按一下一减 用汇 ...
这个用外部中断写很简单的,只要一个中断INC 30H,一个DEC30H(30只是暂存器,随便定义的,30到7F之间都可以)就行,其他的跟数码管静态显示一样的 参考资料:JIU

单片机外部中断控制数码管电子时钟。
while(k1==0)display(dis); \/\/等待按键释放 } if(t0n>=20&&dis==0) \/\/中断20次,1秒到,计时状态下时钟计时 { t0n=0;second++; \/\/秒加1 if(second>=60) \/\/到60秒 { second=0;minute++; \/\/分加1 if(minute>=60) \/\/到60分 { minute=0;hour++; \/\/小时加1 if(hour...

用c语言编写一个计数器(单片机为51型,数码管为共阴)要求有三个按键分别...
如果这样的话挺简单的,51单片机的计数器io口记得好像是P3^0和P3^1,但不管怎么,首先设置TMOD,将C\/T位置1,这就改为计数器了,然后可以编写函数来对一个变量进行加减;同样利用51单片机的外部中断也可以实现计数功能,打开外部中断开关,在外部中断服务函数对计数变量进行加减;最简单的,直接利用io口...

就是按钮按一下,数码管从0开始加1,加到9,用c语言单片机编写并且要用...
s1==9){s1==0;}\/\/如果是9就下一个显示0 else{s1++;}\/\/如果不是正常加一 } } P0=num[s1];\/\/刷新7seg值}}这程序我刚打的,我也不知道能不能行,你看看吧,试试。能帮上点算点。不好意思我没好好看清题目 !我没用计数器,sorry耽误你时间了 ...

求单片机(c51)外部中断实验的c语言代码或者思路,要求在补充
include<reg51.h>#define uchar unsigned charvoid delay(void){uchar i,j;for(i=0;i<200;i++)for(j=0;j<120;j++);}void ext0() interrupt 0{uchar i;for(i=0;i<8;i++) { P2=0x00; delay(); P2=0xff; delay(); }}main(){uchar i;EX0=1;IT0=1;EA...

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...

c51单片机按键每按一次同时数码管显示数字加一是什么?
用外部中断,每中断一次,中断服务程序将数组元素加一P0=Shuzu[ax++](或指针加一:P0=*P++)以上假设P0口驱动数码管!至于数码管使用的是共阳还是共阴,就把相对的数值存在数组中!- 外部中断0的中断程序入口 void TI_0() interrupt 0 { --- } 都提示到这里了,下面自己该会吧?如果是...

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

相似回答