88点阵动态显示 硬件组成:单片机最小系统+88点阵+按键 图形移动模式 切换 1 跳动 2 上移 3 下移 4 左移 5 右移 显示内容汉字 一 二 三 四。四个字 仿真图: 程序: 源代码 #include #define uchar unsigned char #define uint unsigned int // 左右移动 取码方式 阴码逐列 uchar code TAB[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空屏 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00,/*'一',0*/ 0x00,0x40,0x44,0x44,0x44,0x44,0x40,0x00,/*'二',1*/ 0x00,0x40,0x54,0x54,0x54,0x54,0x42,0x00,/*'三',2*/ 0x00,0x7E,0x52,0x5E,0x42,0x5E,0x52,0x7E,/*'四',3*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空屏, //空屏 }; // 上下移动及翻页 取模方式 阳码逐行 uchar code TAB1[]={ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏 0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,/*'一',0*/ 0xFF,0xFF,0xC3,0xFF,0xFF,0xFF,0x81,0xFF,/*'二',1*/ 0xFF,0xBF,0xC3,0xFF,0xC3,0xFF,0x81,0xFF,/*'三',2*/ 0xFF,0x81,0xA9,0xA9,0xA9,0x9D,0xBD,0x81,/*'四',3*/ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏 }; uchar idata Buffer[48]={0}; //缓存显示单元 sbit key1=P3^2; //外部中断 uchar num=0;//用于图形移动切换 char i,t; void delay(uchar t) { while(t--) {;} } void delay_ms(uint z) //延时子程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void right(void) { uchar N,T; for(N=0;N<40;n++)>40;n++)> { for(T=0;T<70;t++)>70;t++)> { P1=0x7f; //0111 1111 第一列开始 for(i=0;i<> { P0=TAB[i+N]; delay(100); delay_ms(1);//实物消影 P0=0X00; //实物消影 P1=P1>>1|P1<7; 0011="" 1111="" |="" 1000="" 0000="1011" 1111="">7;> } } } } void left(void) { uchar N,T; uchar m,n; for(m=0;m<> for(n=0;n<> Buffer[8*m+n]=TAB[7-n+m*8]; //将TAB数组中的数据重新排列 for(N=0;N<40;n++)>40;n++)> { for(T=0;T<60;t++)>60;t++)> { P1=0xfe; for(i=0;i<> { P0=TAB[i+N]; delay(100); delay_ms(1);//实物消影 P0=0X00; //实物消影 P1=P1<1|p1>>7; //扫描起始列为第一行 } } } } void up(void) { uchar N,T; for(N=0;N<40;n++)>40;n++)> for(T=0;T<60;t++)>60;t++)> { P0=0x01; for(i=0;i<> { P1=TAB1[i+N]; delay(100); delay_ms(1);//实物消影 P1=0XFF; //实物消影 P0=P0<1|p0>>7; } } } void down(void) { uchar N,T; uchar m,n; for(m=0;m<> for(n=0;n<> Buffer[8*m+n]=TAB1[7-n+m*8]; //将TAB数组中的数据重新排列 for(N=0;N<40;n++)>40;n++)> for(T=0;T<70;t++)>70;t++)> { P0=0x80; for(i=0;i<> { P1=Buffer[i+N]; delay(100); delay_ms(1);//实物消影 P1=0XFF; //实物消影 P0=P0>>1|P0<7;>7;> } } } void dongtai(void) { uchar N,T; for(N=0;N<6;n++) 循环扫描一遍6帧="">6;n++)> for(T=0;T<100;t++)>100;t++)> { P0=0x01; for(i=0;i<> { P1=TAB1[i+8*N]; delay(100); delay_ms(1);//实物消影 P1=0XFF; //实物消影 P0=P0<1|p0>>7; } } } void main(void) { EA=1; EX0=1;//开启外部中断0 IT0=1;//触发方式为下降沿 按键按下就触发 while(1); } void wbINT0() interrupt 0 { num++; if(num==6) { num=0; } switch (num) { case 1: dongtai();break; case 2: up();break; case 3: down();break; case 4: left();break; case 5: right();break; default: P0=0XFF; P1=0XFF;break; } } 仿真结果: |
|
来自: 龙之吻6iinxl8c > 《单片机及控制系统》