设计16*16 LED点阵屏来模仿电梯运行的楼层显示装置,利用单片机I/O口接8只开关,代表1-8层楼层按键,若某一楼层的按键按下,点阵屏显示从当前位置向上或向下平滑滚动显示到指定楼层的位置,到达指定位置后由蜂鸣器发出声音led灯闪烁,后数字继续滚动显示。
#include<reg52.h> #include<intrins.h> void delayms(unsigned char t); void dataset(unsigned char a); void dataset1(unsigned char a); void dataset2(unsigned char a); void dataset3(unsigned char a); void setlie(unsigned char a,unsigned char b); void sethang(unsigned char a,unsigned char b); void hang(unsigned char a); void lie(unsigned char a); void hanglie(unsigned char a,unsigned char b); void clear(); void hangbianli(unsigned char *a); void liebianli(unsigned char *a); void all(unsigned char a); void all1(unsigned char a); void num(unsigned char n); void shangxia(unsigned char x); unsigned char code hanglist[16][2] = {{0x80,0x00},{0x40,0x00} ,{0x20,0x00} ,{0x10,0x00} ,{0x08,0x00} ,{0x04,0x00} ,{0x02,0x00} ,{0x01,0x00} , {0x00,0x80},{0x00,0x40} ,{0x00,0x20} ,{0x00,0x10} ,{0x00,0x08} ,{0x00,0x04} ,{0x00,0x02} ,{0x00,0x01}}; unsigned char code shang[8][2] = {{0x01,0x80},{0x03,0xc0} ,{0x07,0xe0} ,{0x0f,0xf0} ,{0x03,0xc0} ,{0x03,0xc0} ,{0x03,0xc0} ,{0x03,0xc0}}; unsigned char code zero[16][2] = {{0x00,0x00},{0x00,0x00} ,{0x0f,0xf0} ,{0x0f,0xf0} ,{0x0c,0x30} ,{0x0c,0x30} ,{0x0c,0x30} ,{0x0c,0x30} , {0x0c,0x30},{0x0c,0x30} ,{0x0c,0x30} ,{0x0c,0x30} ,{0x0f,0xf0} ,{0x0f,0xf0} ,{0x00,0x00} ,{0x00,0x00}}; unsigned char code one[16][2] = {{0x00,0x00},{0x00,0x00} ,{0x01,0x80} ,{0x03,0x80} ,{0x07,0x80} ,{0x01,0x80} ,{0x01,0x80} ,{0x01,0x80} , {0x01,0x80},{0x01,0x80} ,{0x01,0x80} ,{0x01,0x80} ,{0x07,0xe0} ,{0x07,0xe0} ,{0x00,0x00} ,{0x00,0x00}}; unsigned char code two[16][2] = {{0x00,0x00},{0x00,0x00} ,{0xf,0xf0} ,{0x0f,0xf0} ,{0x00,0x30} ,{0x00,0x30} ,{0x00,0x30} ,{0x0f,0xf0} , {0x0f,0xf0},{0x0c,0x00} ,{0x0c,0x00} ,{0x0c,0x00} ,{0x0f,0xf0} ,{0x0f,0xf0} ,{0x00,0x00} ,{0x00,0x00}}; unsigned char code three[16][2] = {{0x00,0x00},{0x00,0x00} ,{0xf,0xf0} ,{0x0f,0xf0} ,{0x00,0x30} ,{0x00,0x30} ,{0x00,0x30} ,{0x0f,0xf0} , {0x0f,0xf0},{0x00,0x30} ,{0x00,0x30} ,{0x00,0x30} ,{0x0f,0xf0} ,{0x0f,0xf0} ,{0x00,0x00} ,{0x00,0x00}}; unsigned char code four[16][2] = {{0x00,0x00},{0x00,0x00} ,{0xc,0x30} ,{0x0c,0x30} ,{0x0c,0x30} ,{0x0c,0x30} ,{0x0c,0x30} ,{0x0f,0xf0} , {0x0f,0xf0},{0x00,0x30} ,{0x00,0x30} ,{0x00,0x30} ,{0x00,0x30} ,{0x00,0x30} ,{0x00,0x00} ,{0x00,0x00}}; unsigned char code five[16][2] = {{0x00,0x00},{0x00,0x00} ,{0xf,0xf0} ,{0x0f,0xf0} ,{0x0c,0x00} ,{0x0c,0x00},{0x0c,0x00} ,{0x0f,0xf0}, {0x0f,0xf0} ,{0x00,0x30} ,{0x00,0x30} ,{0x00,0x30},{0x0f,0xf0} ,{0x0f,0xf0} ,{0x00,0x00} ,{0x00,0x00}}; unsigned char code six[16][2] = {{0x00,0x00},{0x00,0x00} ,{0xf,0xf0} ,{0x0f,0xf0} ,{0x0c,0x00} ,{0x0c,0x00},{0x0c,0x00} ,{0x0f,0xf0}, {0x0f,0xf0} ,{0x0c,0x30} ,{0x0c,0x30} ,{0x0c,0x30},{0x0f,0xf0} ,{0x0f,0xf0} ,{0x00,0x00} ,{0x00,0x00}}; unsigned char code seven[16][2] = {{0x00,0x00},{0x00,0x00} ,{0xf,0xf0} ,{0x0f,0xf0} , {0x00,0x30}, {0x00,0x30}, {0x00,0x30}, {0x00,0x30}, {0x00,0x30}, {0x00,0x30}, {0x00,0x30}, {0x00,0x30}, {0x00,0x30}, {0x00,0x30},{0x00,0x00} ,{0x00,0x00}}; unsigned char code eight[16][2] = {{0x00,0x00},{0x00,0x00} ,{0xf,0xf0} ,{0x0f,0xf0} ,{0x0c,0x30} ,{0x0c,0x30},{0x0c,0x30} ,{0x0f,0xf0}, {0x0f,0xf0} ,{0x0c,0x30} ,{0x0c,0x30} ,{0x0c,0x30},{0x0f,0xf0} ,{0x0f,0xf0} ,{0x00,0x00} ,{0x00,0x00}}; sbit sj0 = P0^1; sbit hs0 = P0^0; sbit dpt0 = P0^2; sbit sj1 = P0^4; sbit hs1 = P0^3; sbit dpt1 = P0^5; sbit sj2 = P2^1; sbit hs2 = P2^0; sbit dpt2 = P2^2; sbit sj3 = P2^4; sbit hs3 = P2^3; sbit dpt3 = P2^5; sbit LED = P3^0; sbit beep = P3^1; unsigned char p = 0; //¶à´Î unsigned char state = 0; //µ±Ç°Â¥²ã±ê־λ unsigned char ctrl = 0; //Â¥²ã¿ØÖÆÎ» void main() { state = 1; ctrl = 1; LED = 0; beep = 0; while(1) { switch(~P1) { case 0x01: ctrl = 1; break; case 0x02: ctrl = 2; break; case 0x04: ctrl = 3; break; case 0x08: ctrl = 4; break; case 0x10: ctrl = 5; break; case 0x20: ctrl = 6; break; case 0x40: ctrl = 7; break; case 0x80: ctrl = 8; break; default: break; } if(ctrl > state) { LED = 0; for( ; state < ctrl ; state ++) //Ò»¸öСËã·¨ µ½´ïÌØ¶¨Â¥²ãʱºò²»ÔÙÏÔʾÁË ÒòΪelse{}¾ÍÊÇÏÔʾ { for(p = 0; p<50; p++) num(state); shangxia(1); } beep = 1; } else if (ctrl < state) { LED = 0; for( ; state > ctrl ; state --) //Ò»¸öСËã·¨ µ½´ïÌØ¶¨Â¥²ãʱºò²»ÔÙÏÔʾÁË ÒòΪelse{}¾ÍÊÇÏÔʾ { for(p = 0; p<50; p++) num(state); shangxia(0); } beep = 1; } else{ num(state); LED = 1; beep = 0; } }} void shangxia(unsigned char x) { if(x == 0 ) { //Ï for(p = 0; p<30; p++) all1(0); delayms(300); for(p = 0; p<30; p++) all1(4); delayms(300); for(p = 0; p<30; p++) all1(8); delayms(300); for(p = 0; p<30; p++) all1(0); delayms(300); for(p = 0; p<30; p++) all1(4); delayms(300); for(p = 0; p<30; p++) all1(8); delayms(300); } else //ÉÏ { for(p = 0; p<30; p++) all(0); delayms(100); for(p = 0; p<30; p++) all(4); delayms(100); for(p = 0; p<30; p++) all(8); delayms(100); for(p = 0; p<30; p++) all(0); delayms(100); for(p = 0; p<30; p++) all(4); delayms(100); for(p = 0; p<30; p++) all(8); delayms(100); } } void num(unsigned char n) { unsigned char i = 0; for(i = 0; i<16; i++) { hangbianli(hanglist[i]); if(n == 0) { liebianli(zero[i]); } else if(n == 1) { liebianli(one[i]); } else if(n == 2) { liebianli(two[i]); } else if(n == 3) { liebianli(three[i]); } else if(n == 4) { liebianli(four[i]); } else if(n == 5) { liebianli(five[i]); } else if(n == 6) { liebianli(six[i]); } else if(n == 7) { liebianli(seven[i]); } else if(n == 8) { liebianli(eight[i]); } else {} delayms(10); } clear(); } void all(unsigned char a) { unsigned char i = 0; for(i = 8; i<16; i++) { hangbianli(hanglist[i-a]); liebianli(shang[i-8]); delayms(10); } clear(); } void all1(unsigned char a) { unsigned char i = 0; for(i = 0; i<9; i++) { hangbianli(hanglist[i+a]); liebianli(shang[7-i]); delayms(10); } clear(); } //µ¥¶ÀµãµÆµÄ´úÂë //void hanglie(unsigned char a,unsigned char b) //{ // lie(b); // hang(a); //} //void hang(unsigned char a) //{ // if(a == 0) // sethang(0x80,0x00); // else if (a == 1) // sethang(0x40,0x00); // else if (a == 2) // sethang(0x20,0x00); // else if (a == 3) // sethang(0x10,0x00); // else if (a == 4) // sethang(0x08,0x00); // else if (a == 5) // sethang(0x04,0x00); // else if (a == 6) // sethang(0x02,0x00); // else if (a == 7) // sethang(0x01,0x00); // else if (a == 8) // sethang(0x00,0x80); // else if (a == 9) // sethang(0x00,0x40); // else if (a == 10) // sethang(0x00,0x20); // else if (a == 11) // sethang(0x00,0x10); // else if (a == 12) // sethang(0x00,0x08); // else if (a == 13) // sethang(0x00,0x04); // else if (a == 14) // sethang(0x00,0x02); // else if (a == 15) // sethang(0x00,0x01); //} //void lie(unsigned char a) //{ // if(a == 0) // setlie(0x80,0x00); // else if (a == 1) // setlie(0x40,0x00); // else if (a == 2) // setlie(0x20,0x00); // else if (a == 3) // setlie(0x10,0x00); // else if (a == 4) // setlie(0x08,0x00); // else if (a == 5) // setlie(0x04,0x00); // else if (a == 6) // setlie(0x02,0x00); // else if (a == 7) // setlie(0x01,0x00); // else if (a == 8) // setlie(0x00,0x80); // else if (a == 9) // setlie(0x00,0x40); // else if (a == 10) // setlie(0x00,0x20); // else if (a == 11) // setlie(0x00,0x10); // else if (a == 12) // setlie(0x00,0x08); // else if (a == 13) // setlie(0x00,0x04); // else if (a == 14) // setlie(0x00,0x02); // else if (a == 15) // setlie(0x00,0x01); //} void hangbianli(unsigned char * a) { sethang(a[0],a[1]); } void liebianli(unsigned char * a) { setlie(a[0],a[1]); } void clear() { sethang(0xff,0xff); setlie(0x00,0x00); } void sethang(unsigned char a,unsigned char b) { dataset2(~a); dataset3(~b); } void setlie(unsigned char a,unsigned char b) { dataset(a); dataset1(b); } void dataset(unsigned char a) { unsigned char i; unsigned char b = 0x01; dpt0 = 0; for (i = 0;i<8;i++) { hs0 = 0; sj0 = a&b; hs0 = 1; b = b << 1; } dpt0 = 1; } void dataset1(unsigned char a) { unsigned char i; unsigned char b = 0x01; dpt1 = 0; for (i = 0;i<8;i++) { hs1 = 0; sj1 = a&b; hs1 = 1; b = b << 1; } dpt1 = 1; } void dataset2(unsigned char a) { unsigned char i; unsigned char b = 0x01; dpt2 = 0; for (i = 0;i<8;i++) { hs2 = 0; sj2 = a&b; hs2 = 1; b = b << 1; } dpt2 = 1; } void dataset3(unsigned char a) { unsigned char i; unsigned char b = 0x01; dpt3 = 0; for (i = 0;i<8;i++) { hs3 = 0; sj3 = a&b; hs3 = 1; b = b << 1; } dpt3 = 1; } void delayms(unsigned char t) { unsigned char i,j; for(i=t;i>0;i--) for(j=123;j>0;j--); }