黄金会员 
 
主题
回帖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; 
  } 
 } |   
 
 
 
 |