// M16+8M+ICCAVR7.22
// LED点阵屏控制板与LED 点阵屏接口定义
//PB口的01234顺序接138的A、B、C、OE1OE2
//PD口的012顺序接595的DS、lock,clk
//字模:阴码,行列式,逆向,C51格式
#include <iom16v.h>
#include <macros.h>
#include "hanzi.h"
#include "delay.c"
const unsigned char sw[16] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,};
//154的驱动代码,根据154的真值表计算而来。
extern const unsigned char hanzi[];
#define screen_size 1
#define hanzi_size_S 10
unsigned char BUFF1[(screen_size+1)*2]; //缓存
unsigned char disrow; //disrow 为16行变量
unsigned int light; //亮度,数字越大亮度越低
unsigned char shutdown; //关闭时间
signed char move; //移动位数(8bit)
unsigned char speed; //sudu=0
unsigned char sudo = 15;
extern unsigned int num_r;
unsigned int zimo,f_left,f_right,f_up,f_down;
unsigned char trg,release,cont;
unsigned char move_flag = 0;
void Left(const unsigned char *p,unsigned int f); //左移显示
void Up(const unsigned char *p,unsigned int f); //上移显示
void Right(const unsigned char *p,unsigned int f); //右移显示
void Down(const unsigned char *p,unsigned int f); //下移显示
#define DS_H() PORTD |= BIT(PD6)
#define DS_L() PORTD &=~BIT(PD6)
#define lock_H() PORTD |= BIT(PD5)
#define lock_L() PORTD &=~BIT(PD5)
#define clk_H() PORTD |= BIT(PD7)
#define clk_L() PORTD &=~BIT(PD7)
/*******************************************
* 595发送一个字节数据 *
********************************************/
void send_byte(unsigned char byte)
{
unsigned char i;
lock_L();
for (i = 0x01; i > 0; i = i<<1) //先发送低位,再发送高位
{
if((byte&i) == 0)
DS_L();
else
DS_H();
clk_L();
clk_H();
}
}
/*********************************************************
函数名:void Move_L(const unsigned char *p,unsigned int f)
功能:缓存数据 左移
*********************************************************/
void Move_L(const unsigned char *p,unsigned int f)
{
signed char s;
for(s=screen_size; s >= 0; s--)
{
BUFF1[2*s] = p[f + 32*s + disrow];
BUFF1[2*s+1] = p[f + 32*s + disrow + 16];
}
}
/*********************************************************
函数名:void Move_R(const unsigned char *p,unsigned int f)
功能:缓存数据 右移
*********************************************************/
void Move_R(const unsigned char *p,unsigned int f)
{
BUFF1[0] = p[f + disrow + 16];
BUFF1[1] = p[f + disrow ];
BUFF1[3] = p[f + disrow + 32];
BUFF1[2] = p[f + disrow + 48];
}
/*********************************************************
函数名:void Move_U(const unsigned char *p,unsigned int f)
功能:缓存数据 上移
*********************************************************/
void Move_U(const unsigned char *p,unsigned int f)
{
if ((16 - move) > disrow)
{
BUFF1[1]=p[f + disrow + move];
BUFF1[2]=p[f + disrow + move + 16];
}
else
{
BUFF1[1]=p[f + disrow + move + 16];
BUFF1[2]=p[f + disrow + move + 32];
}
}
/*********************************************************
函数名:void Move_D(const unsigned char *p,unsigned int f)
功能:缓存数据 下移
*********************************************************/
void Move_D(const unsigned char *p,unsigned int f)
{
if ( move <= disrow)
{
BUFF1[1]=p[f + disrow - move];
BUFF1[2]=p[f + disrow - move + 16];
}
else
{
BUFF1[1]=p[f + disrow - move + 48];
BUFF1[2]=p[f + disrow - move + 64];
}
}
/*********************************************************
函数名:void Down(const unsigned char *p,unsigned int f)
功能: 下移
*********************************************************/
void Down(const unsigned char *p,unsigned int f)
{
signed char s;
for(disrow = 0; disrow < 16; disrow++)
{
Move_D(p,f); //
for(s = screen_size*2; s > 0; s--) //发送16字节数据
{
send_byte(BUFF1[s]); //发送数据
}
PORTB=0x10; //关闭显示
lock_H(); //锁存为高,595锁存信号
PORTB=sw[disrow ]; //输出行信号
delay_nus(light); //控制亮度,速度(反比关系)速度快了亮度低
} //for (disrow)
if(speed++ >= sudo) //控制左移速度
{
speed=0;
if(move++ >= 16)
{
move = 0; //16列移位计数器清零
zimo = zimo+32; //取字模计数器加32,准备下一个字
if(zimo > (hanzi_size_S*32)) //字模是否到最后?
zimo = 0; //从头在来
}//if (move)
} //if (speed)
}
/*********************************************************
函数名:void Up(const unsigned char *p,unsigned int f)
功能: 上移
*********************************************************/
void Up(const unsigned char *p,unsigned int f)
{
signed char s;
for(disrow = 0; disrow < 16; disrow++)
{
Move_U(p,f);
for(s = screen_size*2; s > 0; s--) //发送16字节数据
{
send_byte(BUFF1[s]); //发送数据
}
PORTB=0x10; //关闭显示
lock_H(); //锁存为高,595锁存信号
PORTB=sw[disrow ]; //输出行信号
delay_nus(light); //控制亮度,速度(反比关系)速度快了亮度低
} //for (disrow)
if(speed++ >= sudo) //控制左移速度
{
speed=0;
if(move++ >= 16)
{
move = 0; //16列移位计数器清零
zimo = zimo+32; //取字模计数器加32,准备下一个字
if(zimo > (hanzi_size_S*32)) //字模是否到最后?
zimo = 0; //从头在来
}//if (move)
} //if (speed)
}
/*********************************************************
函数名:void Right(const unsigned char *p,unsigned int f)
功能: 右移
*********************************************************/
void Right(const unsigned char *p,unsigned int f)
{
signed char s;
unsigned char temp;
for(disrow = 0; disrow < 16; disrow++)
{
Move_R(p,f); //取模
if (move < 8) //发送16字节数据
{
temp=((BUFF1[0] << move)|(BUFF1[1] >> (8-move)));
send_byte(temp); //发送数据
temp=((BUFF1[1] << move)|(BUFF1[2] >> (8-move)));
send_byte(temp);
}
else
{
temp=((BUFF1[1] << (move - 8))|(BUFF1[2] >> (16 - move)));
send_byte(temp); //发送数据
temp=((BUFF1[2] << (move - 8))|(BUFF1[3] >> (16 - move)));
send_byte(temp);
}
PORTB = 0x10; //关闭显示
lock_H(); //锁存为高,595锁存信号
PORTB = sw[disrow]; //输出行信号
delay_nus(light); //控制亮度,速度(反比关系)速度快了亮度低
}
if(speed++ >= sudo) //控制左移速度
{
speed=0;
if(move++ >= 15)
{
move = 0; //16列移位计数器清零
zimo = zimo+32; //取字模计数器加32,准备下一个字
if(zimo > (hanzi_size_S*32)) //字模是否到最后?
zimo = 0; //从头在来
}//if (move)
} //if (speed)
}
/*********************************************************
函数名:void Left(const unsigned char *p,unsigned int f)
功能: 左移
*********************************************************/
void Left(const unsigned char *p,unsigned int f)
{
signed char s;
unsigned char temp;
for(disrow = 0; disrow < 16; disrow++)
{
Move_L(p,f); //
for(s=screen_size*2; s > 0; s--) //发送16字节数据
{
temp=((BUFF1[s-1] >> move)|(BUFF1[s] << (8-move)));
send_byte(temp); //发送数据
}
PORTB = 0x10; //关闭显示
lock_H(); //锁存为高,595锁存信号
delay_nus(shutdown);
PORTB = sw[disrow]; //输出行信号
delay_nus(light); //控制亮度,速度(反比关系)速度快了亮度低
}//for (disrow)
if(speed++ >= sudo) //�
没有合适的资源?快使用搜索试试~ 我知道了~
LED.zip_154 595_595 154_atmega16 595
共26个文件
c:4个
_c:2个
h:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 153 浏览量
2022-09-24
17:57:20
上传
评论
收藏 100KB ZIP 举报
温馨提示
atmega16+595+154做的16*16单色点阵
资源推荐
资源详情
资源评论
收起资源包目录
LED.zip (26个子文件)
点阵
5led.prj 1KB
delay.c 735B
delay.dp2 72B
16x16点阵.PWI 1KB
5LED.hex 7KB
5LED.cof 9KB
delay.lis 5KB
main.c 11KB
Last Loaded 16x16点阵.DBK 113KB
5LED.lk 9B
hanzi._h 21KB
main._c 5KB
delay._c 710B
hanzi.h 2KB
main.lis 85KB
5LED.mak 585B
delay.h 162B
zuo you.c 8KB
16x16点阵.DSN 113KB
5LED.lst 48KB
5LED.SRC 50B
5LED.dbg 6KB
main.o 23KB
zuoyoushanxia.c 8KB
5LED.mp 4KB
delay.s 2KB
共 26 条
- 1
资源评论
周楷雯
- 粉丝: 80
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功