点击下载Study-2812增强版上Verilog源码(maxplus2环境下):
主要修改内容:
1.规范了LCD的访问:
如:
void LcdObj::SendCommand(char cCommand)
{
if ((SpiRclkRegs & 0xff) == 0xa5)
{
LCDRS = 0;//设置命令方式//RS
LCDRW = 0;//写LCD//RW
LCDE = cCommand;//写LCD命令//E,DB7~0
if (cCommand == 0x01)//清除显示命令,需要等待时间相对较长
{
_delay_loop_(1600);//st7920要求等待1.6mS
}
else
{
_delay_loop_(72);//st7920要求等待72uS
}
}
else//LCD非正规模式
{
LcdComH = cCommand;
LcdComL = cCommand;
if (cCommand == 0x01)//清除显示命令,需要等待时间相对较长
{
_delay_loop_(1600);//st7920要求等待1.6mS
}
else
{
_delay_loop_(72);//st7920要求等待72uS
}
}
}
void LcdObj::SendData(char cData)
{
if ((SpiRclkRegs & 0xff) == 0xa5)
{
LCDRS = 1;//设置数据方式//RS=1
LCDRW = 0;//写LCD//RW=0
LCDE = cData;//写LCD数据//E=1->0,DB7~0
_delay_loop_(72);//st7920要求等待72uS
}
else//LCD非正规模式
{
LcdDatH = cData;
LcdDatL = cData;
_delay_loop_(72);//st7920要求等待72uS
}
}
2.发送74HC595的RCLK脉冲加入了密码
interrupt void ISRTimer2(void)
{
//以下定义为共阳数码管
static const unsigned char LedTab[] =
{//显示字符表存放在ROM中
LedChar0, LedChar1, LedChar2, LedChar3,
LedChar4, LedChar5, LedChar6, LedChar7,
LedChar8, LedChar9, LedCharA, LedCharB,
LedCharC, LedCharD, LedCharE, LedCharF
};
if ((Timer.Count1 & 0x0f) == 0)
{
System.SpiReadWrite(~LedTab[Timer.Count2 & 0x0f]);
Timer.Count2++;
if ((SpiRclkRegs & 0xff) == 0xa5)
{
SpiRclkRegs = Paddword;//直接产生74HC595密码的RCLK脉冲
}
else//CPLD旧版本需要模拟RCLK信号
{
SpiRclkRegs = 0;
SpiRclkRegs = 1;
}
}
}
哈哈~~~虽然Verilog的程序很简单,但很实用~~~
文章评论(0条评论)
登录后参与讨论