您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 单片机控制8×8LED点阵屏显示数字的设计
单片机控制8×8LED点阵屏显示数字的设计一、设计要求:用单片机的P0口外接74LS245作为控制8×8LED点阵屏的行驱动,列选通由P1端口控制,程序运行时,8×8LED点阵屏依次循环显示数字0~9。刷新时间由定时器T1的定时中断来完成。二、方案论证:方案一:最小系统加74LS245驱动芯片和成品8*8点阵进行设计。优点:外围电路简单易焊,耗时少!缺点:成本较高。方案二:最少系统加三极管驱动和手焊8*8点阵进行设计。优点:成本相对较低。缺点:点阵难焊,耗时长。本次课设采用方案一,原因是耗时少,电路相对稳定。三、理论设计:用CAD软件绘制的硬件原理图及工作原理的分析;软件流程图及带注释的程序清单。工作原理:P0口外芯片74LS245来驱动行点亮,P1口外接点阵进行列选通,以扫描方式依次显示0-9.软件流图:开始↓定时器1初始化↓主循环←←↑←←↑↓无↑↑定时中断函数→→有无中断→→↑↑↓有↑↓↑调用显示子函数↑↓→→→→→→完整程序:#includereg52.h#defineucharunsignedchar#defineuintunsignedintuinti,a,b=0,t;ucharcodedxuan0[]={0x00,0x18,0x24,0x24,0x24,0x24,0x24,0x18,};//0ucharcodedxuan1[]={0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x00,};//1ucharcodedxuan2[]={0x00,0x3C,0x24,0x0C,0x18,0x30,0x3C,0x00,};//2ucharcodedxuan3[]={0x00,0x3C,0x24,0x18,0x0C,0x24,0x38,0x00,};//3ucharcodedxuan4[]={0x00,0x08,0x18,0x38,0x28,0x3C,0x08,0x00,};//4ucharcodedxuan5[]={0x00,0x3C,0x20,0x3C,0x04,0x24,0x38,0x00,};//5ucharcodedxuan6[]={0x00,0x18,0x24,0x20,0x38,0x24,0x24,0x18,};//6ucharcodedxuan7[]={0x00,0x3C,0x04,0x08,0x08,0x10,0x10,0x10,};//7ucharcodedxuan8[]={0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,};//8ucharcodedxuan9[]={0x18,0x24,0x24,0x24,0x1C,0x04,0x24,0x18,};//9ucharcodewxuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,};//位选voiddelay(uintz)//延时函数{uintx,y;for(x=z;x0;x--)for(y=256;y0;y--);}//***********************显示函数**************************//voiddisplay0(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan0[i];delay(1);}}voiddisplay1(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan1[i];delay(1);}}voiddisplay2(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan2[i];delay(1);}}voiddisplay3(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan3[i];delay(1);}}voiddisplay4(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan4[i];delay(1);}}voiddisplay5(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan5[i];delay(1);}}voiddisplay6(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan6[i];delay(1);}}voiddisplay7(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan7[i];delay(1);}}voiddisplay8(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan8[i];delay(1);}}voiddisplay9(){for(a=50;a0;a--)for(i=0;i9;i++){P1=wxuan[i];P0=dxuan9[i];delay(1);}}voidmain(void){TMOD=0X10;//设置定时器1为工作方式1TH1=(65536-50000)/256;TL1=(65536-50000)%256;//定时50000usEA=1;//开总中断ET1=1;//开定时器1中断TR1=1;//启动定时器1while(1){if(t==40){t=0;switch(b){case0:display0();break;case1:display1();break;case2:display2();break;case3:display3();break;case4:display4();break;case5:display5();break;case6:display6();break;case7:display7();break;case8:display8();break;case9:display9();break;}b++;if(b==10)b=0;}}}//*****************定时中断函数****************//voidext1()interrupt3{TH1=(65536-50000)/256;TL1=(65536-50000)%256;t++;}四、电路仿真及仿真结果分析:电路仿真结果正确,达到预期设计要求,能循环显示0-9,刷新时间由定时器1设定。五、测试方案与测试结果:经自焊硬件测试,结果与仿真效果一致,由于材料限制,点阵引脚与订座子有时会接触不良,导致某条LED不亮。六、作品功能和使用说明:接上5V电源即可循环显示0-9.七、心得体会:设计过程中遇到程序设计问题,网上找到视频教程学习中断程序的编写,以及查阅C语言课本得以解决。调试过程中发现点阵不亮,到处检查电路有无短路和断路,无果,一次无意间碰到芯片发现在灯闪了一下,这才意识到芯片与插座接触不良,这是由于材料有限,没有匹配的引脚插座,用其他代替所致,后来做了点手脚,好多了!本次课设收获:通过焊接动手能力增强,积累了究错经验,通过编程对C语言也学到了不少,更重要的是,更进一步理解了单片机的功能与用法。八、参考文献《单片机原理及应用》主编李建忠《C语言程序设计教程》主编杨路明
本文标题:单片机控制8×8LED点阵屏显示数字的设计
链接地址:https://www.777doc.com/doc-1805537 .html