找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1762|回复: 0
收起左侧

单片机用点阵LED实现静态字符显示实验程序

[复制链接]
ID:1007874 发表于 2022-3-5 18:02 | 显示全部楼层 |阅读模式
实验目的:
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、程序:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. uchar num; //要显示的数字
  4. void display()
  5. {
  6. uchar i,j,k,n;
  7. //数字0~9的8*8点阵
  8.   uchar code dizn[]={
  9.   0x00,0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,//0
  10.   0x00,0x00,0x00,0x00,0x21,0x7F,0x01,0x00,//1
  11.   0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,//2
  12.   0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00,//3
  13.   0x00,0x00,0x0c,0x14,0x24,0x7F,0x04,0x00,//4
  14.   0x00,0x00,0x72,0x51,0x51,0x51,0x4E,0x00,//5
  15.   0x00,0x00,0x3E,0x49,0x49,0x49,0x26,0x00,//6
  16.   0x00,0x00,0x40,0x40,0x40,0x4F,0x70,0x00,//7
  17.   0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,//8
  18.   0x00,0x00,0x32,0x49,0x49,0x49,0x3E,0x00,//9
  19. };
  20. k=0x01; //初始化,显示第一列
  21. n=num*8; //初始化为所显示数字的第一列所在位置
  22. for(i=8;i>0;i--)
  23. {
  24. P0 =dizn[n]; //输出行码
  25. P2= ~k; //输出列码,让指定的列显示
  26. k =k <<1; //指向下一列
  27. n++; //指向点阵中的下一个字节
  28. for(j=100;j>0;j--);//延迟一段时间,约200μs
  29. P2=0xFF; //关闭显示
  30. }
  31. }
  32. void main(void)
  33. {
  34. TMOD=0x01 ;
  35. TH0=(65536-10000)/256;
  36. TL0=(65536-10000)%256;
  37. TR0=1;
  38. ET0=1;
  39. EA=1; //到这里为止,将定时器0初始化为10ms中断
  40. num =0;
  41. //显示的第一个数字为“0”
  42. while(1)
  43. {
  44. display(); //循环调用显示函数显示 num的值
  45. }
  46. }
  47. void timer0()interrupt 1
  48. {
  49. static uchar t=0;
  50. TH0=(65536-10000)/256;
  51. TL0=(65536-10000)%256;
  52.   t++;
  53. if(t==100) //判断是否到1s
  54. {
  55. t =0; //1时间到,将软件计数单元清0
  56. num ++;                //计算要显示的下一个数码
  57. if(num>9)num=0;// 如果大于9,则又从0开始
  58. }
  59. }
复制代码
3、对源程序进行编译。按下界面上的编译按键进行编译程序。并生成了hex可执行文件,该文件在工程文件夹下。
将生成的HEX可执行文件加入Proteus仿真软件at89c52芯片中。
四、问题思考:
使用模软件获得汉字“王”的编码后,修改程序,让8*8 LED点阵显汉字“王”

以上图文的Word格式文档下载(内容和本网页上的一模一样,方便大家保存):
实验十一:用点阵LED实现静态字符显示 - 副本.docx (112.67 KB, 下载次数: 12)

评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表