|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
一、读懂代码- Q. v# x' V: ]$ T; S
+ P" P* G0 i$ D* [. {" S4 S
先把代码看懂然后再在源代码的基础上修改写成自己的点阵显示。
) j n8 w) O6 T& _自己对代码的简短理解都写成注释附在下面的源代码中了,有不对的地方请指正9 V0 g$ S8 V& J4 D$ u) o8 U
- 实现现象:下载程序后点阵上显示数字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); //消隐,如果的话点阵显示时会出现重影现象
- }
- }
- }
- ' R9 @# M, E# k$ |/ Q7 L2 k5 ]
* b- P1 N2 c" O( `
复制代码, z5 q/ x; S0 S; Q) M) M, b a
# P2 V# l- w# `$ M! R, C二、修改代码$ p6 C. C* s6 C/ }( X7 |. Q9 e2 @. t
) O6 M' K" B. C( `% o$ t1 s4 q
理解代码以后我们对代码进行修改来实现自己的点阵显示。1 V; ]7 t3 k; H+ K* D4 B
因为对亮度和别的指标没有要求,所以只需要修改和字符显示的这一段就可以啦
- ~! N- |) k6 x2 Q3 n- U$ h) Z. r: ], t* ?/ r, L5 N
u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};1 w+ @8 n6 F- l, ^3 S9 L4 Q
6 q7 G$ c: m3 v$ M, K3 Q
我要显示的是佐字,对应的代码经过推断
4 Y. k- s @( D2 ?0 Z0 K
. r# V4 A( m0 O, C/ D# S6 y w) h$ s0 @) t; ^4 @
所以代码修改为
& _6 I. b3 h3 Y B- @
) S) T8 O9 z- ~4 \u8 ledduan[]={0x20,0x7f,0xd0,0x71,0x51,0xdf,0x51,0x51};( C. Y: N, y9 A, A [7 y: t
+ s# ]4 B4 F8 {6 G; E8 `, i! e
三、烧录
5 O* N& O( ?' o! o* _1 U% `3 X6 ] q: m
将代码编译形成新的hex文件后下载到实验板上就OK啦,当然前提是你没有像我一样忘记JOE短接片短接到GND端
2 m! r# `& l4 q+ s% f& Y. C! ]: ?6 \$ Y( p# ~' f( Y
* {+ n. U. n8 T& d2 Z |
|