单片机控制8×8LED点阵屏显示数字的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=0;i<9;i++)
{P1=wxuan[i];P0=dxuan0[i];delay(1);} }
void
display1(){for(a=50;a>0;a--)
for(i=0;i<9;i++)
{P1=wxuan[i];P0=dxuan1[i];delay(1);} }
void
display2(){for(a=50;a>0;a--)
for(i=0;i<9;i++)
{P1=wxuan[i];P0=dxuan6[i];delay(1);} }
void
display7(){for(a=50;a>0;a--)
{P1=wxuan[i];P0=dxuan7[i];delay(1);} }
void
display8(){for(a=50;a>0;a--)
电路仿真结果正确,达到预期设计要求,能循环显示 0-9,刷新时间由定 时器 1 设定。
五、 测试方案与测试结果:
经自焊硬件测试,结果与仿真效果一致,由于材料限制,点阵引脚与订座
子有时会接触不良,导致某条 LED 不亮。
六、 作品功能和使用说明:
接上 5V 电源即可循环显示 0-9.
七、 心得体会:
{P1=wxuan[i];P0=dxuan8[i];delay(1);} }
void
display9(){for(a=50;a>0;a--)
{P1=wxuan[i];P0=dxuan9[i];delay(1);} }
for(i=0;i<9;i++) for(i=0;i<9;i++) for(i=0;i<9;i++)
设计过程中遇到程序设计问题,网上找到视频教程学习中断程序的编
写,以及查阅 C 语言课本得以解决。调试过程中发现点阵不亮,到处检查
电路有无短路和断路,无果,一次无意间碰到芯片发现在灯闪了一下,这
才意识到芯片与插座接触不良,这是由于材料有限,没有匹配的引脚插座,
用其他代替所致,后来做了点手脚,好多了!
本次课设收获:通过焊接动手能力增强,积累了究错经验,通过编程
case 5: display5();break;
case 6: display6();break;
case 7: display7();break;
case 8: display8();break;
case 9: display9();break; } b++;if(b==10)b=0; } } } //*****************定时中断函数****************// void ext1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; t++; } 四、 电路仿真及仿真结果分析:
for(i=0;i<9;i++)
{P1=wxuan[i];P0=dxuan2[i];delay(1);} }
void
display3(){for(a=50;a>0;a--)
for(i=0;i<9;i++)
{P1=wxuan[i];P0=dxuan3[i];delay(1);} }
void
display4(){for(a=50;a>0;a--)
void delay(uint z)
//延时函数
{
uHale Waihona Puke Baidunt x,y;
for(x=z;x>0;x--)
for(y=256;y>0;y--);
}
//***********************显示函数**************************//
void
display0(){for(a=50;a>0;a--)
uint i,a,b=0,t; uchar code dxuan0[]={0x00,0x18,0x24,0x24,0x24,0x24,0x24,0x18,}; //"0" uchar code dxuan1[]={0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x00,}; //"1" uchar code dxuan2[]={0x00,0x3C,0x24,0x0C,0x18,0x30,0x3C,0x00,}; //"2" uchar code dxuan3[]={0x00,0x3C,0x24,0x18,0x0C,0x24,0x38,0x00,}; //"3" uchar code dxuan4[]={0x00,0x08,0x18,0x38,0x28,0x3C,0x08,0x00,}; //"4" uchar code dxuan5[]={0x00,0x3C,0x20,0x3C,0x04,0x24,0x38,0x00,}; //"5" uchar code dxuan6[]={0x00,0x18,0x24,0x20,0x38,0x24,0x24,0x18,}; //"6" uchar code dxuan7[]={0x00,0x3C,0x04,0x08,0x08,0x10,0x10,0x10,}; //"7" uchar code dxuan8[]={0x38,0x44,0x44,0x38,0x44,0x44,0x44,0x38,}; //"8" uchar code dxuan9[]={0x18,0x24,0x24,0x24,0x1C,0x04,0x24,0x18,}; //"9" uchar code wxuan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,};//位选
void main(void) {
TMOD=0X10;
//设置定时器 1 为工作方式 1
TH1=(65536-50000)/256;
TL1=(65536-50000)%256; //定时 50000us
EA=1;
//开总中断
ET1=1;
//开定时器 1 中断
TR1=1;
//启动定时器 1
while(1)
{
if(t==40)
{
t=0;
switch(b)
{
case 0: display0();break;
case 1: display1();break;
case 2: display2();break;
case 3: display3();break;
case 4: display4();break;
单片机控制 8×8 LED 点阵屏显示数字的设计
一、 设计要求:
用单片机的 P0 口外接 74LS245 作为控制 8×8 LED 点阵屏的行驱 动,列选通由 P1 端口控制,程序运行时,8×8 LED 点阵屏依次循环显 示数字 0~9。刷新时间由定时器 T1 的定时中断来完成。 二、 方案论证: 方案一:最小系统加 74LS245 驱动芯片和成品 8*8 点阵进行设计。 优点:外围电路简单易焊,耗时少! 缺点:成本较高。 方案二:最少系统加三极管驱动和手焊 8*8 点阵进行设计。 优点:成本相对较低。 缺点:点阵难焊,耗时长。 本次课设采用方案一,原因是耗时少,电路相对稳定。 三、 理论设计:用 CAD 软件绘制的硬件原理图及工作原理的分析;软件流程图 及带注释的程序清单。
for(i=0;i<9;i++)
{P1=wxuan[i];P0=dxuan4[i];delay(1);} }
void
display5(){for(a=50;a>0;a--)
for(i=0;i<9;i++)
{P1=wxuan[i];P0=dxuan5[i];delay(1);} }
void
display6(){for(a=50;a>0;a--)
工作原理:P0 口外芯片 74LS245 来驱动行点亮,P1 口外接点阵进行列选通,以扫描
方式依次显示 0-9.
软件流图:
开始
↓
定时器 1 初始化
↓
主循环← ← ↑← ←↑
↓
无↑ ↑
定时中断函数 → → 有无中断→ → ↑ ↑
↓有
↑
↓
↑
调用显示子函数
↑
↓→ → → → → →
完整程序: #include<reg52.h> #define uchar unsigned char #define uint unsigned int
对 C 语言也学到了不少,更重要的是,更进一步理解了单片机的功能与用
法。
八、 参考文献
《单片机原理及应用》 《C 语言程序设计教程》
主编 李建忠 主编 杨路明