找回密码
 注册
关于网站域名变更的通知
查看: 228|回复: 3
打印 上一主题 下一主题

单片机8*8LED点阵—显示汉字实验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-15 10:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
一、读懂代码
; j3 Z) L2 a5 Z! W# i; @
$ _' Z: L4 u# W& y# ~/ t" L+ K4 Q: y先把代码看懂然后再在源代码的基础上修改写成自己的点阵显示。+ w2 x( |+ ^& Q0 K% K" z! Y4 T* h
自己对代码的简短理解都写成注释附在下面的源代码中了,有不对的地方请指正6 U7 z: l/ G. N0 b, o; L: H; q0 D, u- n
  • 实现现象:下载程序后点阵上显示数字0
  • 注意事项:一定要将JOE短接片短接到GND端,如果不需要595后面的小灯点亮可以拔掉JP595短接片。
  • ***************************************************************************************/
  • #include "reg51.h"           //此文件中定义了单片机的一些特殊功能寄存器
  • #include<intrins.h>
  • typedef unsigned int u16;     //对数据类型进行声明定义
  • typedef unsigned char u8;
  • sbit SRCLK=P3^6;//用SRCLK来表示P3口的第六位
  • sbit RCLK=P3^5;//用RCLK来表示P3口的第五位
  • sbit SER=P3^4;//用SER来表示P3口的第四位
  • //SRCLK、RCLK、SER都是下面程序用到的的芯片74hc595中的引脚的名称,想对芯片进一步了解的同学可以看一下代码后面附的链接
  • u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
  • u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  • //二极管点亮的的条件是对应行列分别为高低电平使得电流产生。
  • //对应本实验实验板即为列线为高电平,行线为低电平时二极管被点亮
  • //第一行代码控制哪列为高电平即为需要此列是否点亮,第二行控制哪一行为低电平,即某一行被点亮,行列共同点亮时交叉处LED亮灯
  • //实验板的原理图因为自己看不懂所以这里的行列可能混了【手动狗头】对这个比较清楚的同学可以帮给我指正一下,谢谢。
  • /*******************************************************************************
  • * 函 数 名         : delay
  • * 函数功能         : 延时函数,i=1时,大约延时10us
  • 死循环实现延时功能
  • *******************************************************************************/
  • void delay(u16 i)
  • {
  •     while(i--);
  • }
  • /*******************************************************************************
  • * 函数名         : Hc595SendByte(u8 dat)
  • * 函数功能         : 向74HC595发送一个字节的数据
  • * 输入           : 无
  • * 输出             : 无
  • 将一个字节的信息串行输入给74HC595以后由芯片并行输出
  • *******************************************************************************/
  • void Hc595SendByte(u8 dat)
  • {
  •     u8 a;
  •     SRCLK=0;
  •     RCLK=0;
  •     for(a=0;a<8;a++)
  •     {
  •         SER=dat>>7;
  •         dat<<=1;
  •         SRCLK=1;
  •         _nop_();
  •         _nop_();
  •         SRCLK=0;
  •     }
  •     RCLK=1;
  •     _nop_();
  •     _nop_();
  •     RCLK=0;
  • }
  • /*******************************************************************************
  • * 函 数 名       : main
  • * 函数功能       : 主函数
  • * 输    入       : 无
  • * 输    出         : 无
  • *******************************************************************************/
  • void main()
  • {
  •     u8 i;
  •     while(1)//轮回点亮循环体
  •     {
  •         P0=0x7f;
  •         for(i=0;i<8;i++)
  •         {
  •             P0=ledwei;         //位选
  •             Hc595SendByte(ledduan);  //发送段选数据
  •             delay(100);        //延时
  •             Hc595SendByte(0x00);  //消隐,如果的话点阵显示时会出现重影现象
  •         }
  •     }
  • }
  • 2 D1 x8 O) L2 X* v

0 b" U& j4 i; K: \- ~; @- L- ~+ {复制代码
% m8 K! L) v8 E6 A
" G. w& `" K9 W' U" C8 B二、修改代码8 V5 ^' t0 K# A
7 J; J" K% t9 `* E2 E1 E* q
理解代码以后我们对代码进行修改来实现自己的点阵显示。3 q( S  X& u/ L
因为对亮度和别的指标没有要求,所以只需要修改和字符显示的这一段就可以啦  c' x6 E( `5 g9 h' ]. k
7 u& k7 v9 y* g. l) v
u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};4 |$ j- U5 z9 e! {3 P8 i' d& t
6 l! ^7 H, M; i" W1 |5 {
我要显示的是佐字,对应的代码经过推断
9 l4 n$ o- E' B. L$ E+ ~4 j2 c - m1 r9 n" q2 l# f/ I9 _

; ?" ?' A4 F1 D: d所以代码修改为6 r3 k$ K% F; }$ S

( ~: m8 G/ z: Zu8 ledduan[]={0x20,0x7f,0xd0,0x71,0x51,0xdf,0x51,0x51};
# `/ j. I- i4 |6 L5 B5 N5 R
" U$ c4 i) w! P/ z$ P三、烧录* \( U$ y$ T+ m
. J0 Q* t. V' g. J2 o6 a' a9 W! d9 _
将代码编译形成新的hex文件后下载到实验板上就OK啦,当然前提是你没有像我一样忘记JOE短接片短接到GND端- V' [/ j" r2 a+ M2 R
9 f  n$ Y6 Q8 R/ b% U: h7 X/ E

: p/ `  n9 Y( B7 D" ~

该用户从未签到

2#
发表于 2022-6-15 13:24 | 只看该作者
来了来了,学习学习。

该用户从未签到

3#
发表于 2022-6-15 14:14 | 只看该作者
详细啊,学习学习

该用户从未签到

4#
发表于 2022-6-15 15:40 | 只看该作者
很详细哦,学习学习。||ヽ(* ̄▽ ̄*)ノミ|Ю
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-24 18:34 , Processed in 0.093750 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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