黄金会员
主题
回帖0
积分9861
阅读权限40
注册时间2009-11-11
最后登录1970-1-1
在线时间 小时
|
自己编的。使用外部中断0。1602显示。由于PROTEUS没有编码开关所以仿真文件没有。实物试过了能正常工作。
switch.rar
(10.46 KB, 下载次数: 292)
想请教大家temp0是不是一定要定义为全局变量?
#include<reg52.h>
#include"bmkg.h"
code un8 tab[]={"0123456789" };
void Delay(un8 xms);
void Delay1(un16 xus);
void lcdinit(); //1602初始化
void lcdcom(un8 com);//写指令
void lcddata(un8 dat);//写数据
void DSPLAY(); //显示函数
un8 temp0=0;
main()
{
lcdinit();
EA=1; //允许中断
EX0=1;//开外中断0
IT0=1;//后沿负跳边触发外中断
while(1)
{
lcdcom(0x80);
DSPLAY();
}
}
void lcdinit()
{
Delay(15);
lcdcom(0x03);
Delay(5);
lcdcom(0x03);
Delay(5);
lcdcom(0x03);
Delay(2);
lcdcom(0x02);//4线制
Delay(1);
lcdcom(0x06);
lcdcom(0x0C);
lcdcom(0x28);
}
void lcdcom(un8 com)
{
un8 temp1;
temp1=com;
lcd1602=com|0x0f;
RS=0;
Delay1(2);
EN=1;
Delay1(2);
EN=0;
com=temp1;
lcd1602=(com<<4)|0x0f;
RS=0;
Delay1(2);
EN=1;
Delay1(2);
EN=0;
}
void lcddata(un8 dat)
{
un8 temp2;
temp2=dat;
lcd1602=dat|0x0f;
RS=1;
Delay1(2);
EN=1;
Delay1(2);
EN=0;
dat=temp2;
lcd1602=(dat<<4)|0x0f;
RS=1;
Delay1(2);
EN=1;
Delay1(2);
EN=0;
}
void DSPLAY()
{
lcddata(tab[temp0/10]);
lcddata(tab[temp0%10]);
}
void Delay(un8 xms)
{
un8 i,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--);
}
void Delay1(un16 xus)
{
un16 i,j;
for(i=xus;i>0;i--)
for(j=30;j>0;j--);
}
void intt0() interrupt 0
{
if(0==bm2)
{
temp0++;
}
else
temp0--;
if(0XFF==temp0)
{
temp0=99;
}
if(100==temp0)
{
temp0=0;
}
} |
|