#include <REG51.H> #include <intrins.h> #include "array.h" //--重定义函数变量--// #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //--定义SPI要使用的 IO--// sbit MOSIO = P3^4; sbit R_CLK = P3^5; sbit S_CLK = P3^6; //--全局函数声明--// void HC595SendData( uchar BT3, uchar BT2,uchar BT1,uchar BT0); /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main(void) { int k, j, ms; //--定义一个指针数组指向每个汉字--// uchar *p[] ={tab17, tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8, tab9, tab10, tab11, tab12, tab13, tab14, tab15, tab16}; while(1) { for(ms = 20; ms > 0; ms--) //移动定格时间设置 { for(k = 0; k < 16; k++) //显示一个字 { HC595SendData(~(*(p[0] + 2*(k+j) + 1)),~(*(p[0] + 2*(k+j) )),tab0[2*k],tab0[2*k + 1]); //因为字模软件取的数组是高电平有效,所以列要取反 } //--清屏--// HC595SendData(0xff,0xff,0,0); //清屏 } j++; if(j == (17*15) ) { j = 0; } } } /******************************************************************************* * 函 数 名 : HC595SendData * 函数功能 : 通过595发送四个字节的数据 * 输 入 : BT3:第四个595输出数值 * * BT2: 第三个595输出数值 * * BT1:第二个595输出数值 * * BT0:第一个595输出数值 * 输 出 : 无 *******************************************************************************/ void HC595SendData( uchar BT3, uchar BT2,uchar BT1,uchar BT0) { uchar i; //--发送第一个字节--// for(i=0;i<8;i++) { MOSIO = BT3 >> 7 ; //从高位到低位 BT3 <<= 1; S_CLK = 0; S_CLK = 1; } //--发送第一个字节--// for(i=0;i<8;i++) { MOSIO = BT2 >>7; //从高位到低位 BT2 <<= 1; S_CLK = 0; S_CLK = 1; } //--发送第一个字节--// for(i=0;i<8;i++) { MOSIO = BT1 >> 7; //从高位到低位 BT1 <<= 1; S_CLK = 0; S_CLK = 1; } //--发送第一个字节--// for(i=0;i<8;i++) { MOSIO = BT0 >> 7; //从高位到低位 BT0 <<= 1; S_CLK = 0; S_CLK = 1; } //--输出--// R_CLK = 0; //set dataline low R_CLK = 1; //片选 R_CLK = 0; //set dataline low } |
ahshmj 发表于 2016-7-26 16:28
首先你的字模必须是从左至右按列取模(上半部和下半部 各从左至右16列),左起第一列上,左起第一列下、左 ...
ahshmj 发表于 2016-7-27 21:36
“可以改显示的位置吗”是什么意思?
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |