/*****函数声明*****/void display1(void);void display2(void);void display3(void);void display4(void);
/*****n(us)延时子程序*****/void DelayUs(uint N){uint x;for(x=0; x<=N;x++);}
/*****中断服务程序*****/void intersvr0(void) interrupt 0 using 1{KY=~KY;//每个摇动来回水银开关会在摆幅两端分别产生下降沿中断,只提取其中一次(从左向右摇才显示)if(KY==0){num++;//计算中断次数switch(pic)//选择画面{case 0:{display1();}break;case 1:{display2();}break;case 2:{display3();}break;case 3:{display4();}break;default:{display1();}} }}
/*****显示子程序1(汉字)*****/void display1(void){uchar i;if(num>10){disp++;num=0;}//12个汉字分为3次显示完(每次显示4个),每中断10次切换if(disp>2)disp=0;DelayUs(5200);//此处延时时间依各硬件差别而各不相同,试着调整使得显示内容居中即可for(i=0;i<64;i++){ P0=~hanzi[disp*128+i*2]; P2=~hanzi[disp*128+i*2+1]; DelayUs(100);}}
/*****显示子程序2(LOVE)*****/void display2(void){uchar i;DelayUs(4000);for(i=0;i<64;i++){ P0=~love[i*2]; P2=~love[i*2+1]; DelayUs(120);}}
/*****显示子程序3(心形图案)*****/void display3(void){uchar i;DelayUs(4000);for(i=0;i<64;i++){ P0=~loveyou[i*2]; P2=~loveyou[i*2+1]; DelayUs(120);}}
/*****显示子程序4(呵呵o(∩_∩)o图案)*****/void display4(void){uchar i;DelayUs(4000);for(i=0;i<64;i++){ P0=~hehe[i*2]; P2=~hehe[i*2+1]; DelayUs(120);}}
/*****主函数*****/void main(void){IT0=1;EX0=1;EA=1;//开中断,下降沿中断KY=0;while(1)//主程序中只检测按键{if(KEY==0)//画面切换键按下{DelayUs(10000); //按键去抖if(KEY==0);pic++;}if(pic>3)pic=0;}}/*****END*****/