实验目的: 1、理解LED屏结构及工作原理; 2. 掌握LED屏的静态显示方式; 3. 掌握LED屏与单片机的接线方法。 二、实验环境: 计算机 1 台 三、 实验步骤: l、步骤一:在D盘或E盘以自己名字建立自已的文件夹。 1)打开keil软件,建立keil工程。 2) 将工程起名为led16保存在自已的文件夹中。 3) 选择CPU,我们这里选择Atmel公司的AT89S52 4) 选好芯片确定后,弹出提示框,问是否添加一些文件,我们这里选“否” 5) 下面新建文本文档,用来编写源程序。 6) 按下保存图标,保存新建的文件以“led16.c”文件名保存在工程文件夹下。 7) 将新建的文件加入工程中。在Source Group 1上点鼠标右键,在弹出的菜单上选择Add Files…选项 在弹出的对话框中选择工程文件夹下刚才新建的“led16.c”文件。点击Add,再点击Close关闭对话框。 8) 设置工程,让其编译时输出十六进制可执行文件。至此,工程文件已经建立设置完毕,在开始写源程序之前,我们先用Proteus软件设计出led灯的电路图。 2、步骤二:设计电路图。 1) 首先选择要用的器件。如下图,按下P 图标进行器件选择。输入单片机芯片名AT89C52,器件便会出现在右侧列表中。双击列表中的芯片名,它便会加入到主界面的器件表中, 并按下图完成电路图连接。至此,工程文件已经建立设置完毕,在开始写源程序之前,我们先用Proteus软件设计出共阳数码管显示的电路图。 2、步骤二:设计电路图。
1) 首先选择要用的器件。如下图,按下图标进行器件选择。 单片机芯片名AT89C52、按键button、电阻res,无极电容cap,有极电容cap-elec,晶振crystal,8x8点阵matrix-8X8-orange排阻respack-8,并按下图完成电路图连接。 到这里电路已将设计完毕,下面我们到Keil中进行相关程序的编写。 3、步骤三:编辑,编译并运行程序。 1、任务要求: 用8*8LED点阵显示0~9数字,P0口接LED点阵阳极,由于P0口没有上拉能力,所以采用排阻上接电源提供上拉电流,P2口接LED点阵阴极。分屏显示数字0~9,可以利用通过二维数组把0~9的数据码存放起来。定时器T0用来定时1s,每显示完一个数字延时1s,即可让点阵每隔1s依次显示0~9,实现分屏显示的效果。 2、程序:
- #include<reg52.h>
- #define uchar unsigned char
- uchar num; //要显示的数字
- void display()
- {
- uchar i,j,k,n;
- //数字0~9的8*8点阵
- uchar code dizn[]={
- 0x00,0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,//0
- 0x00,0x00,0x00,0x00,0x21,0x7F,0x01,0x00,//1
- 0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,//2
- 0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00,//3
- 0x00,0x00,0x0c,0x14,0x24,0x7F,0x04,0x00,//4
- 0x00,0x00,0x72,0x51,0x51,0x51,0x4E,0x00,//5
- 0x00,0x00,0x3E,0x49,0x49,0x49,0x26,0x00,//6
- 0x00,0x00,0x40,0x40,0x40,0x4F,0x70,0x00,//7
- 0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,//8
- 0x00,0x00,0x32,0x49,0x49,0x49,0x3E,0x00,//9
- };
- k=0x01; //初始化,显示第一列
- n=num*8; //初始化为所显示数字的第一列所在位置
- for(i=8;i>0;i--)
- {
- P0 =dizn[n]; //输出行码
- P2= ~k; //输出列码,让指定的列显示
- k =k <<1; //指向下一列
- n++; //指向点阵中的下一个字节
- for(j=100;j>0;j--);//延迟一段时间,约200μs
- P2=0xFF; //关闭显示
- }
- }
- void main(void)
- {
- TMOD=0x01 ;
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- TR0=1;
- ET0=1;
- EA=1; //到这里为止,将定时器0初始化为10ms中断
- num =0;
- //显示的第一个数字为“0”
- while(1)
- {
- display(); //循环调用显示函数显示 num的值
- }
- }
- void timer0()interrupt 1
- {
- static uchar t=0;
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- t++;
- if(t==100) //判断是否到1s
- {
- t =0; //1时间到,将软件计数单元清0
- num ++; //计算要显示的下一个数码
- if(num>9)num=0;// 如果大于9,则又从0开始
- }
- }
复制代码 3、对源程序进行编译。按下界面上的编译按键进行编译程序。并生成了hex可执行文件,该文件在工程文件夹下。
将生成的HEX可执行文件加入Proteus仿真软件at89c52芯片中。
四、问题思考:
使用模软件获得汉字“王”的编码后,修改程序,让8*8 LED点阵显汉字“王”
以上图文的Word格式文档下载(内容和本网页上的一模一样,方便大家保存):
实验十一:用点阵LED实现静态字符显示 - 副本.docx
(112.67 KB, 下载次数: 12)
|