51单片机串口通信实现16 16点阵显示.docx

上传人:b****5 文档编号:7211039 上传时间:2023-01-21 格式:DOCX 页数:16 大小:477.14KB
下载 相关 举报
51单片机串口通信实现16 16点阵显示.docx_第1页
第1页 / 共16页
51单片机串口通信实现16 16点阵显示.docx_第2页
第2页 / 共16页
51单片机串口通信实现16 16点阵显示.docx_第3页
第3页 / 共16页
51单片机串口通信实现16 16点阵显示.docx_第4页
第4页 / 共16页
51单片机串口通信实现16 16点阵显示.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

51单片机串口通信实现16 16点阵显示.docx

《51单片机串口通信实现16 16点阵显示.docx》由会员分享,可在线阅读,更多相关《51单片机串口通信实现16 16点阵显示.docx(16页珍藏版)》请在冰豆网上搜索。

51单片机串口通信实现16 16点阵显示.docx

51单片机串口通信实现1616点阵显示

51单片机开发的点阵实验

附录2中讲到Proteus调试单片机串口的方法

附录1中讲到8*8点阵的显示原理

 

以下程序有本人编写,请参考:

用串口调试助手发送个16进制01是个笑脸;02是个哭脸。

可以用上图,基于proteus做仿真。

C51程序:

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitle1=P1^0;

sbitle2=P1^1;

sbitle3=P1^2;

sbitle4=P1^3;

ucharcodetab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

ucharcodetac[8][8]=

{

{0x00,0x00,0xf8,0x04,0x32,0x4a,0x02,0x02},

{0x02,0x12,0x22,0xc2,0x04,0xf8,0x00,0x00},

{0x00,0x00,0x1f,0x20,0x4c,0x52,0x40,0x40},

{0x40,0x48,0x44,0x43,0x20,0x1f,0x00,0x00},//笑脸

{0x00,0x00,0xf8,0x04,0x02,0x4a,0x32,0x02},

{0x02,0x02,0xc2,0x22,0x04,0xf8,0x00,0x00},

{0x00,0x00,0x1f,0x20,0x40,0x52,0x4c,0x40},

{0x40,0x40,0x43,0x44,0x20,0x1f,0x00,0x00},//哭脸

};

uchara=0;

intb=0,c=0,flag=0,i;

voidinit()//初始化

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SM0=0;

SM1=1;

REN=1;

EA=1;

ES=1;

}

voiddelay(uintn)

{

uinti,j;

for(i=n;i>0;i--)

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

}

voiddisplay()//显示

{

if(b==1)c=0;

if(b==2)c=4;

P1=0xff;

P0=0x00;

P2=0xff;

le2=0;

le4=0;

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

{

P2=tab[i];

P0=tac[0+c][i];

delay

(1);

}

P1=0xff;

P0=0x00;

P2=0xff;

le1=0;

le4=0;

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

{

P2=tab[i];

P0=tac[1+c][i];

delay

(1);

}

P1=0xff;

P0=0x00;

P2=0xff;

le1=0;

le3=0;

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

{

P2=tab[i];

P0=tac[2+c][i];

delay

(1);

}

P1=0xff;

P0=0x00;

P2=0xff;

le2=0;

le3=0;

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

{

P2=tab[i];

P0=tac[3+c][i];

delay

(1);

}

}

voidmain()

{

init();

while

(1)

{

if(flag==1)

{

if(b==1||b==2)

display();

}

}

}

voidser()interrupt4//串口中断

{

RI=0;

a=SBUF;

if(a==0x01)b=1;

if(a==0x02)b=2;

flag=1;

}

附1:

目前我会的有3种

1.单片机+虚拟终端(作为串口输入设备)+串口

2.单片机+虚拟终端(作为串口输入设备)+MAX232+串口

3.单片机+串口+虚拟串口程序(virtualserialport)+串口调试助手

4.单片机+MAX232+串口+虚拟串口程序(virtualserialport)+串口调试助手(这个不会,主要是不知道该怎么在Proteus中连线,理论上方法4和3的连线方法是没有太大差别的,我也不知道哪里设置不对,一直没弄成功,问题出在加入了MAX232后)

 

方法1和2的区别不大,只是在串口和单片机中间多接个MAX232,因为是仿真软件,所以串口有和没有MAX232的仿真结果是一样的,就是细节上的设置不同

方法1连线如下:

方法2连线图如下:

方法1和方法2的区别在PCT(虚拟终端输入串口的PCT计算机发送端)的一个设置参数不同,(当波特率改变的时候虚拟终端里面的波特率设置也要改变)

方法1设置如下                            

方法2设置如下

不同的地方在PCT,串口这边的虚拟终端的RX/TXPolarity的设置不同,当在单片机和串口间

没接入MAX232,该项设置为normal,当在其间接入了MAX232该项设置为inverted。

综上所述:

方法1和方法2其实是1类方法,共同点是单片机的发送端(TXD)与串口接收端(RXD)相连,单片机接收端(RXD)与串口发送端(TXD)相连。

(这种连接是交叉连接)

 

方法3和方法4区别不大,只是在串口和单片机之间多加入了MAX232,其实实物连接时是要加入MAX232的,但是加入MAX232的方法4用Proteus仿真不出来,就仿真效果而言方法3和方法4是一样的。

方法3连线图如下:

方法4连线图如下:

Proteus串口设置如下图:

串口调试助手设置如下:

虚拟串口程序界面如下:

单片机虚拟终端的选项作用如下:

如果输入的是ASCII码,那么就不要勾选HexDisplaymode

如果输入的是16进制,那么就要勾选HexDisplaymode

clearscreen是清屏

echotypedcharacters是当你在虚拟终端窗口输入字符时,输入的字符显示在虚拟中断窗口内。

 

综上所述:

方法3和方法4是一类,串口接线是单片机的RXD接串口的RXD,单片机的TXD接串口的TXD。

是一一对应的接线方式。

注意:

单片机晶振频率的设置,Proteus串口接COM2,调试程序接COM3

 

方法1和方法2这类与方法3和方法4这类的区别在哪呢?

区别就在与串口的接线方式不同,方法1和方法2是单片机和串口是交叉接线

                              方法3和方法4是单片机和串口是非交叉接线(一一对应)

附2:

8X8LED点阵显示原理与编程技术

1.实验任务

在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。

2.实验目的

 掌握用单片机I/O口进行LED点阵扫描显示。

3.实验工具

PROTEUS6.9,KeiluVision2软件

4.原理图

5.相关知识

1)LED点阵

八十年代以来出现了组合型IED点阵显示器,以发光二极管为像素,它用高亮度发光二极管芯阵列组合后,环氧树脂和塑模封装而成。

具有高亮度、功耗低、引脚少、视角大、寿命长、耐湿、耐冷热、耐腐蚀等特点。

点阵显示器有单色和双色两类,可显示红,黄,绿,橙等。

LED点阵有4×4、4×8、5×7、5×8、8×8、16×16、24×24、40×40等多种;

根据像素的数目分为等,双基色、三基色等,根据像素颜色的不同所显示的文字、图象等内容的颜色也不同,单基色点阵只能显示固定色彩如红、绿、黄等单色,双基色和三基色点阵显示内容的颜色由像素内不同颜色发光二极管点亮组合方式决定,如红绿都亮时可显示黄色,如果按照脉冲方式控制二极管的点亮时间,则可实现256或更高级灰度显示,即可实现真彩色显示。

图1--5示出几种LED点阵显示器的内部电路结构和外型规格,其它型号点阵的结构与引脚可试验获得。

2)LED点阵扫描驱动方案:

由LED点阵显示器的内部结构可知,器件宜采用动态扫描驱动方式工作,由于LED管芯大多为高亮度型,因此某行或某列的单体LED驱动电流可选用窄脉冲,但其平均电流应限制在20mA内.多数点阵显示器的单体LED的正向压降约在2V左右.但大亮点∮10的点阵显示器单体LED的正向压降约为6V。

大屏幕显示系统一般是将由多个LED点阵组成的小模块以搭积木的方式组合而成的,每一个小模块都有自己的独立的控制系统,组合在一起后只要引入一个总控制器控制各模块的命令和数据即可,这种方法既简单而且具有易展、易维修的特点。

3)LED点阵显示系统中各模块的显示方式:

有静态和动态显示两种。

静态显示原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的脉冲信号,反复循环以上操作,就可显示各种图形或文字信息。

LED点阵显示器单块使用时,既可代替数码管显示数字,也可显示各种中西文字及符号.如5x7点阵显示器用于显示西文字母.5×8点阵显示器用于显示中西文,8x8点阵用于显示中文文字,也可用于图形显示。

用多块点阵显示器组合则可构成大屏幕显示器,但这类实用装置常通过微机或单片机控制驱动。

8X8 点阵LED工作原理说明

8X8点阵LED结构如下图所示

从图中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;因此要实现一根柱形的亮法,如图49所示,对应的一列为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:

一根竖柱:

对应的列置1,而行则采用扫描的方法来实现。

一根横柱:

对应的行置0,而列则采用扫描的方法来实现。

6.C语言源程序

#include

#include

unsignedcharcodetaba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsignedcharcodetabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

/*voiddelay(void)

{

unsignedchari,j;

for(i=10;i>0;i--)

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

}*/

voiddelay1(void)

{

unsignedchari,j,k;

for(k=10;k>0;k--)

for(i=20;i>0;i--)

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

}

voidmain(void)

{

unsignedchari,j;

while

(1)

{

for(j=0;j<3;j++)//fromlefttoright3time

{

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

{

P2=taba[i];

P0=0xff;

delay1();

}

}

for(j=0;j<3;j++)//fromrighttoleft3time

{

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

{

P2=taba[7-i];

P0=0xff;

delay1();

}

}

for(j=0;j<3;j++)//fromtoptobottom3time

{

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

{

P2=0x00;

P0=tabb[7-i];

delay1();

}

}

for(j=0;j<3;j++)//frombottomtotop3time

{

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

{

P2=0x00;

P0=tabb[i];

delay1();

}

}

}

}

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

当前位置:首页 > 高等教育 > 艺术

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

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