发下采用8*8LED动态显示文字演示单片机程序 大家可以参考下.
单片机源程序:
- /*********************************************************************/
- //
- // 采用8*8LED动态显示文字演示程序
- /*********************************************************************/
- //使用AT89C52单片机,12MHZ晶振,P0口输出一行数据,P2口作行扫描,用共阳LED管
- //P1口接三个按键,用于逐字显示、向上滚动显示文字、暂停备用。
- //
- #include "reg51.h"
- #define char unsigned char
- #define int unsigned int
- //
- char key,keytmp;
- char code distab[]=
- {
- /********电子设计8*8字模********************/
- 0x10,0xFE,0x92,0x92,0xFE,0x92,0x10,0x10,
- 0xFE,0x10,0x10,0xFE,0x10,0x10,0x10,0xFE,
- 0x00,0x6C,0x92,0x82,0x44,0x28,0x10,0x00,
- 0x00,0x78,0x04,0x04,0x04,0x04,0x04,0x78,
- 0x00,0x6C,0x92,0x82,0x44,0x28,0x10,0x00,
- };
- //
- char code scan_con[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; // 列扫描控制字
- //
- //
- //**********按键扫描函数***********//
- void keyscan()
- {
- key=(~P1)&0x0f; //读入键值
- if(key!=0) //
- {
- while(((~P1)&0x0f)!=0); //等待按键释放
- keytmp=key; // 键值存放
- }
- }
- //
- //
- //********1毫秒延时程序************//
- delay1ms(int t)
- {
- int i,j;
- for(i=0;i<t;i++)
- for(j=0;j<30;j++)
- keyscan();
- }
- //
- //
- /***********功能程序**********/
- /***********逐字显示**********/
- fun0()
- {
- int m,n,h;
- for(h=0;h<40;h=h+8)
- {for(n=0;n<100;n++)
- {for(m=0;m<8;m++)
- {P0=distab[m+h];P2=scan_con[m];delay1ms(1);}
- }
- }
- }
- //
- /***********向上滚动显示**********/
- fun1()
- {
- int m,n,h;
- for(h=0;h<40;h++) //控制显示字数(32/8=4个)
- {for(n=0;n<30;n++) //控制帧移动速度
- {for(m=0;m<8;m++) //显示1帧扫描(分8行,每行亮1毫秒)
- {P0=distab[m+h];P2=scan_con[m];delay1ms(1);}
- }
- }
- }
- //
- //
- //*********主程序**********//
- main()
- {
- keytmp=1; //上电自动演示功能0)
- while(1)
- {
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
下载:
bb.zip
(26.16 KB, 下载次数: 14)
|