/**************************************************************************************
* LED点阵--显示汉字实验 *
实现现象:下载程序后,按照光盘内操作视频接线,LED点阵显示汉字
注意事项:必须将74HC595模块的JP595短接片短接,否则不会出现现象
***************************************************************************************/
#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"
#include <math.h>
#include <matrix.h>
#include <temp.h>
//typedef unsigned int u16; //对数据类型进行声明定义
//typedef unsigned char u8;
//--定义使用的IO口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
#define GPIO_KEY P2
u8 KeyValue; //用来存放读取到的键值
u8 code smgduan[17]={0,1,2,3,4,5,6,7,8,9};//显示0~F的值
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
* 函数功能 : 通过595发送四个字节的数据
* 输 入 : dat1:第4个595输出数值
* * dat2: 第3个595输出数值
* * dat3:第2个595输出数值
* * dat4:第1个595输出数值
* 输 出 : 无
*******************************************************************************/
void Hc595SendByte(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //发送8位数
{
SER = dat1 >> 7; //从最高位开始发送
dat1 <<= 1;
SRCLK = 0; //发送时序
SRCLK = 1;
}
for(a=0;a<8;a++) //发送8位数
{
SER = dat2 >> 7; //从最高位开始发送
dat2 <<= 1;
SRCLK = 0; //发送时序
SRCLK = 1;
}
for(a=0;a<8;a++) //发送8位数
{
SER = dat3 >> 7; //从最高位开始发送
dat3 <<= 1;
SRCLK = 0; //发送时序
SRCLK = 1;
}
for(a=0;a<8;a++) //发送8位数
{
SER = dat4 >> 7; //从最高位开始发送
dat4 <<= 1;
SRCLK = 0; //发送时序
SRCLK = 1;
}
RCLK = 0;
RCLK = 1;
}
//下面这个子函数如果把形参改成指针(即数组),速度会很慢,所以把四个for循环都写出来了
void HC595_Send(unsigned char dat0,unsigned char dat1,unsigned char dat2,unsigned char dat3)
{
unsigned char i;
SRCLK = 1;
RCLK = 1;
for(i=0;i<8;i++)
{
SER = dat0&0x01;
dat0 >>= 1;
SRCLK = 0;
SRCLK = 1;
}
for(i=0;i<8;i++)
{
SER= dat1&0x01;
dat1 >>= 1;
SRCLK = 0;
SRCLK = 1;
}
for(i=0;i<8;i++)
{
SER = dat2&0x01;
dat2 >>= 1;
SRCLK= 0;
SRCLK = 1;
}
for(i=0;i<8;i++)
{
SER = dat3&0x01;
dat3 >>= 1;
SRCLK = 0;
SRCLK= 1;
}
RCLK= 0;
RCLK= 1;
}
/*******************************************************************************
* 函 数 名 : Show
* 函数功能 : 显示函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Show(u8 w[],u8 d[])
{
u8 i;
for(i=0;i<16;i++)
{
Hc595SendByte(~w[i+16],~w[i],d[16+i],d[i]);
}
}
/*******************************************************************************
* 函 数 名 : Show
* 函数功能 : 显示函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void ShowTime(u8 w[],u8 d[],u16 t)
{
u8 j=0,tab;
u16 i;
for(i= 0; i<t; i++ ) //两个字之间的扫描间隔时间
{
for(tab=0;tab<8;tab++)
{
Show(w,d);
}
}
}
void ShowMove()
{
}
void LeftMove(u8 matrix[],u8 b,u8 t)
{
unsigned char dat0, dat1, dat2, dat3, j, k, n=0;
unsigned int neg, tmp, i;
neg = 0x7FFf;
for(i=0; i<(b-31);i++)
{
for(k=t; k>0; k--)
{
for(j=0; j<16; j++)
{
tmp = _iror_(neg,j);
dat0 = (unsigned char)(tmp);
dat1 = (unsigned char)(tmp>>8);
if((i+n)/16%2!=0) n+=16;
dat3 = (unsigned char)(*(matrix+i+n));
dat2 = (unsigned char)(*(matrix+i+n+16));
HC595_Send(dat0,dat1,dat2,dat3);
n++;
}
n=0;
}
if(i/16%2!=0) i+=16;
}
}
void ShowDot(u8 x,u8 y)
{
u8 dot[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
u8 number;
if(y<=8)
number=x;
if(y>8)
number=16+x;
dot[number]=dot_n[y-1];
Show(ledwei,dot);
}
void Flash_Dot_All()
{
ShowTime(ledwei,diamond1,1);
ShowTime(ledwei,diamond2,1);
ShowTime(ledwei,diamond3,1);
ShowTime(ledwei,diamond4,1);
ShowTime(ledwei,diamond5,1);
ShowTime(ledwei,diamond6,1);
ShowTime(ledwei,diamond7,1);
ShowTime(ledwei,diamond8,5);
}
void Flash_All_Dot()
{
ShowTime(ledwei,diamond8,5);
ShowTime(ledwei,diamond7,1);
ShowTime(ledwei,diamond6,1);
ShowTime(ledwei,diamond5,1);
ShowTime(ledwei,diamond4,1);
ShowTime(ledwei,diamond3,1);
ShowTime(ledwei,diamond2,1);
ShowTime(ledwei,diamond1,1);
}
void Flash_Number_Order() //按顺序显示1,2,3,4,
{
ShowTime(ledwei,Number_1,5);
ShowTime(ledwei,Number_2,5);
ShowTime(ledwei,Number_3,5);
ShowTime(ledwei,Number_4,5);
ShowTime(ledwei,Number_All,20);
ShowTime(ledwei,Clear,5);
ShowTime(ledwei,Number_All,20);
}
void TortClimb()
{
ShowTime(ledwei,Tort,10) ;
ShowTime(ledwei,Tort1,5) ;
ShowTime(ledwei,Tort,5) ;
ShowTime(ledwei,Tort2,5) ;
ShowTime(ledwei,Tort,10) ;
ShowTime(ledwei,Tort3,10) ;
ShowTime(ledwei,Tort4,15) ;
ShowTime(ledwei,Tort5,15) ;
ShowTime(ledwei,Tort6,10) ;
//ShowTime(ledwei,Tort7,10) ;
ShowTime(ledwei,Tort8,10) ;
ShowTime(ledwei,Tort9,10) ;
ShowTime(ledwei,Tort10,10) ;
ShowTime(ledwei,Tort11,5) ;
ShowTime(ledwei,Tort12,5) ;
ShowTime(ledwei,Tort13,5) ;
ShowTime(ledwei,Tort14,5) ;
ShowTime(ledwei,Tort15,5) ;
ShowTime(ledwei,Tort16,2) ;
ShowTime(ledwei,Tort17,2) ;
ShowTime(ledwei,Tort18,2) ;
ShowTime(ledwei,Tort19,2) ;
ShowTime(ledwei,Tort20,2) ;
ShowTime(ledwei,Tort21,2) ;
}
void CountDown(u8 t)
{
ShowTime(ledwei,CountDown_10,t);
ShowTime(ledwei,CountDown_9,t);
ShowTime(ledwei,CountDown_8,t);
ShowTime(ledwei,CountDown_7,t);
ShowTime(ledwei,CountDown_6,t);
ShowTime(ledwei,CountDown_5,t);
ShowTime(ledwei,CountDown_4,t);
ShowTime(ledwei,CountDown_3,t);
ShowTime(ledwei,CountDown_2,t);
ShowTime(ledwei,CountDown_1,t);
}
void ShowNumberTwo(u8 n,u8 m)
{
u8 i,Temp[32]=0;
for(i=0;i<16;i++)
{
if(i<9)
Temp[i]=Number_t[16*n+i];
else
Temp[i+8]=Number_t[16*n+i];
}
for(i=0;i<16;i++)
{
if(i<9)
Temp[i+8]=Number_t[16*m+i];
else
Temp[i+16]=Number_t[16*m+i];
}
ShowTime(ledwei,Temp,1);
}
void CountDownHun()
{
u8 x,y;
for(x=0;x<10;x++)
{
for(y=0;y<10;y++)
{
ShowNumberTwo(x,y);
}
}
}
void ShowNumber(u8 n,u8 t)
{
ShowTime(ledwei,
拍摄测试LED点阵(汉字滚动).rar
66 浏览量
2024-03-01
21:53:27
上传
评论
收藏 75KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
小鸭文库
- 粉丝: 148
- 资源: 5906
最新资源
- 2022213854李沐窈程序.cpp
- pod-tomcat.yaml
- 数据库管理工具:dbeaver-ce-23.0.3-amd64.deb
- This module implements the Requests API.
- Delphi 12 控件之unidac-10.2.1-d29pro.exe
- keyword.other.package.java
- Apple//DTD PLIST 1.0//EN
- comment.block.documentation.rust
- there is no way to distinguish perfectly
- 数据库管理工具:dbeaver-ce-24.0.2-x86-64-setup.exe
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)