cache[1] = temp[0] >> j | temp[1] << (8 - j);
}
displayBuff[0] = ROW_NUM[2 * i]; //上8行码值,上为高位
displayBuff[1] = ROW_NUM[2 * i + 1]; //下8行码值,上为高位
displayBuff[2] = ~cache[0]; //每一行对应的左8列码值,左为高位
displayBuff[3] = ~cache[1]; //每一行对应的右8列码值,左为高位
InputTo595(displayBuff, 4);
_nop_();
OutputFrom595();
DelayX10us(5);//显示时间延时,太长会引起闪烁感
}
}
}
mode = ~mode; //移位8次后模式反转,下一半汉字第一行码值的地址即将存到基准指针
if (mode == 0) num++; //mode再次为0时,即屏幕已显示到下一个字
if (num == wordsCount)
{
num = 0;
moveLeft = ~moveLeft; //反向滚动
}
}
}
/**
* 将displayBuff数组输入级联的595芯片,最后一个元素先输入,从低位到高位顺序输入
* @param displayBuff 输入数组地址
* @param len 要输入的数组元素个数,从数组第一个元素开始计
*/
void InputTo595(uchar *displayBuff, uchar len)
{
uchar i, j;
for (j = len; j > 0; j--)
{
for (i = 0; i < 8; i++)
{
DS_595 = displayBuff[j - 1] & 0x01 ; //先输入最低位
displayBuff[j - 1] >>= 1;
SHCP_595 = 0;
_nop_();
SHCP_595 = 1; //上升沿,输入到移位寄存器
}
}
}
void OutputFrom595() //595输出
{
STCP_595 = 0;
_nop_();
STCP_595 = 1;
STCP_595 = 0;
}
//延时10us的倍数,误差5us
void DelayX10us(uchar multi)
{
do
{
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
} while (--multi);
}
上一篇:8051系列单片机软件精确延时研究(一)
下一篇:4个74HC595级联控制16x16点阵横向滚动带仿真(一)
推荐阅读最新更新时间:2024-11-05 20:28
设计资源 培训 开发板 精华推荐
- VL53L0X Nucleo Pack-包括VL53L0X扩展板和STM32F401RE Nucleo
- vc-02点个灯
- 【CW32】无刷电机驱动器
- LTC2965 的典型应用 - 100V 微功率单电压监视器
- KIT33907AEEVB: 评估板 - MC33907,安全DC/DC,高达800 mA
- EVALQRS-36W-ICE2QS03G,用于 DVD 播放器的 36W、12V 交流转直流单输出电源的评估板
- LTC3633AEUFD 1.2V/1.8V 降压稳压器的典型应用电路,具有一致跟踪和 6V 输入 UVLO
- 涂鸦红外语音助手—小智管家
- RDA5807FP便携式收音机
- 使用 Analog Devices 的 LTC3130IUDC 的参考设计