AT89C51按键控制点阵显示.docx

上传人:b****3 文档编号:27415103 上传时间:2023-06-30 格式:DOCX 页数:12 大小:67.01KB
下载 相关 举报
AT89C51按键控制点阵显示.docx_第1页
第1页 / 共12页
AT89C51按键控制点阵显示.docx_第2页
第2页 / 共12页
AT89C51按键控制点阵显示.docx_第3页
第3页 / 共12页
AT89C51按键控制点阵显示.docx_第4页
第4页 / 共12页
AT89C51按键控制点阵显示.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

AT89C51按键控制点阵显示.docx

《AT89C51按键控制点阵显示.docx》由会员分享,可在线阅读,更多相关《AT89C51按键控制点阵显示.docx(12页珍藏版)》请在冰豆网上搜索。

AT89C51按键控制点阵显示.docx

AT89C51按键控制点阵显示

AT89C51的点阵显示的设计

1.1项目概述

当今社会是一个信息比较发达的时代,点阵的显示屏到处可见,如电梯、公交车、广告牌等等。

为此让大家进一步认识点阵的具体显示原理让大家对其有更深入的了解。

1.2项目要求

用AT89C51单片机控制点阵的显示效果,晶振采用12MHz。

简易模拟电梯的上下显示,以及汉字的简单变换。

(1)用点阵显示屏显示汉字

(2)按键控制字的流动

(3)用74HC15474HC959连接点阵显示屏

1.3系统设计

点阵显示屏主要用来显示信息。

用四个八乘八的点阵显示组合而成的。

1.3.1框图设计

 

 

1.3.2知识点

本项目用到一下知识

1、单片机复位电路工作原理及设计。

2、单片机晶振电路工作原理及设计。

3、按键的设计。

4、点阵的显示。

5、AT89C51的引脚。

6、单片机c语言及程序设计。

1.4硬件设计

本项目用AT89C51单片机的P1、P3传输信息,用P2口按键相连分别显示不同的效果。

1.4.1电路原理图

1.4.2元器件清单

名称

数量

名称

数量

单片机

1个

电阻

1个

晶振12MHz

1个

8*8点阵

4个

电容

2个

按键

4个

电解电容

1个

显示驱动

 

1.5软件设计

1.5.1程序流程图

该程序分为几个部分编写,一个是单片机的主程序,作用是是完成相应的功能,其他的为单个功能的子程序,流程图如下。

 

 

主程序里包括了延时、显示、和按键判断。

按下不同的按键显示不同的效果。

1.5.2 程序清单

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineblkn2

sbitEN74154=P1^7;//74154片选线

sbitST_CP74595=P1^6;//74595内部输出(从移位寄存器到输出锁存器)控制

sbitCLEAR74595=P1^5;//74595移位寄存器清零

sbitKey1=P2^0;

sbitKey2=P2^1;

sbitKey3=P2^2;

sbitKey4=P2^3;

uchardatadispram[32];//显示数据缓冲数组

ucharcount;

//顺向逐列取模

ucharcodeSJM[][32]={

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,

0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*"0",0*/

0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,

0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1",1*/

 

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,

0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*"0",0*/

0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,

0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2",1*/

 

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,

0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*"0",0*/

0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,

0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3",1*/

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,

0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*"0",0*/

0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,

0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00},/*"4",1*/

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,

0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*"0",0*/

0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,

0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*"5",1*/

 

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,

0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*"0",0*/

0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,

0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*"6",1*/

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,

0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*"0",0*/

0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,

0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/*"7",1*/

{0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,

0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00,/*"0",0*/

0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,

0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8",1*/

 

};

//延时函数

voiddelay(unsignedintdt)

{

registerucharbt;

for(;dt;dt--)

for(bt=0;bt<250;bt++);

}

 

//向上移动函数

voidUp_Removeout_Word(uchar*LRp,ucharLRheard,ucharnumber)

{

registeruchari,j,k,l;

for(i=0;i

{

for(j=0;j<2;j++)

for(k=0;k<8;k++)

{

for(l=0;l<16;l++)

{

dispram[l*2]=dispram[l*2]<<1|dispram[l*2+1]>>7;//通过左移或上右移把下一行给上一行

dispram[l*2+1]=dispram[l*2+1]<<1|LRp[(i+LRheard)*32+l*2+j]>>(7-k);//确定移几个数

}

delay(100);

}

delay(100);

}

}

//向下移动函数

voidDown_Removeout_Word(uchar*RRp,ucharRRheard,ucharnumber)

{

registeruchari,j,k,l;

for(i=0;i

{

for(j=2;j>0;j--)

for(k=0;k<8;k++)

{

for(l=0;l<16;l++)

{

dispram[l*2+1]=dispram[l*2+1]>>1|dispram[l*2]<<7;//上半部分向上移一格

dispram[l*2]=dispram[l*2]>>1|RRp[(RRheard-i)*32+l*2+j-1]<<(7-k);

}

delay(100);

}

delay(100);

}

}

 

voidmain(void)

{

uchari;

SCON=0x00;//串行口以方式0工作,用作同步移位寄存器,波特率为fosc/12,禁止接收

TMOD=0x11;//定时器T0以方式1工作,由TR0控制启停

TH0=0xF8;//计数初值,定时2ms

TL0=0x30;

EA=1;

ET0=1;

//IE=0x82;//允许T0申请中断

TR0=1;//启动定时器T0

P1=0x3F;//EN74154=0,ST_CP74595=0,CLEAR74595=1

for(i=0;i<32;i++)

{

dispram[i]=SJM[3][i];

}

while

(1)

{

while(!

Key1)

{

Up_Removeout_Word(SJM,4,4);

}

while(!

Key2)

{

Down_Removeout_Word(SJM,6,7);

}

}

}

 

/**********************************************************************

函数名称:

TIME0(void)interrupt1using1

函数功能:

T0中断服务函数

**********************************************************************/

voidTIME0(void)interrupt1using1

{

registerunsignedcharj=blkn;

TH0=0xF8;//重装计数初值

TL0=0x30;

P1=count|0x20;

do{

j--;

SBUF=dispram[count*blkn+j];//开始发送数据

while(!

TI);//等待发送结束

TI=0;//清发送中断标志位

}while(j);

EN74154=1;//禁止行数据输出

ST_CP74595=1;//允许列数据输出

ST_CP74595=0;//禁止列数据输出

EN74154=0;//允许行数据输出

count++;

if(count>15)

count=0;

}

 

1.6 系统仿真及调试

单片机系统的硬件调试和软件是分不开的,许多硬件错误是在软件调试中被发现和纠正的。

但是通常是先排除明显的硬件故障以后,再和软件结合起来调试以进一步排除故障。

可见硬件的调试时基础,如果硬件调试不通过,软件调试则是无从做起。

硬件调试主要是把电路的各种参数调整到符合设计要求。

先排除硬件电路故障,包括设计性错误和工艺性故障。

一般原则是先静态,后动态。

硬件静态调试主要是检测电路是否有短路、断路、虚焊等,检测芯片引脚焊接是否有错位,数码段位是否焊接正确。

利用万用表或者逻辑测试仪器,检测电路中的各器件以及用脚连接是否正确,是否短路故障。

在通电前,一定要先检查电源电压的幅值和极性,否则很容易造成集成块的损坏。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1