2.3 显示模块
为减少引线数量,采用动态显示技术,其原理参见参考文献[1],在此不再赘述。
2.4 信息(包括菜的口味、价钱)调整模块
在实际应用中,店方往往要根据实际情况对经营的菜的价钱种类进行调整或补充。对菜的种类进行更换只需要将按钮上菜的名字更换即可,但是对菜的价钱和特色进行便捷的更改,则需要编程实现。
在这一部分的设计中,首先要设计一个电子密码,防止非授权人员对菜价进行更改,同时这个电子密码应具备更改的功能;然后再通过键盘输入更改菜的价钱。原理是将菜单上的菜从0~63一行一行索引,每一个菜的索引值也就是在存储器中的地址,而存放密码的位置是第64位,即“01100100”;最后根据相应的地址赋值即可。这一部分的VHDL程序如下:
·(初始化语句)
dressout<="01100100"; ——从存储器中读取密码
savedata<=datain;
if(key_valid=`1`and judgecheck=`0`) then
——准备校对密码
if(judgestate="000" and savedata(27 downto 24)
=butt_code)then ——确认是初状态
judgestate:="001"; ——校对成功则进入
end if; ——下一个状态
if(judgestate="001" and savedata(23 downto 20)
=butt_code)then
judgestate:="010";
downto 8)=butt_code)then
·(循环校对)
elsif(judgestate="110"and savedata(3 downto 0)/
=butt_code)then
judgestate:="000";
end if;
if(butt_code="1011" and judgestate="111")then——校对成功
judgecheck:=`1`; ——赋校对成功值
ledout<="011"; ——点亮绿灯
judgestate:="000"; ——恢复初值
elsif(butt_code="1011" and judgestate/="111")then
——如果密码错误
judgestate:="000"; ——恢复初值
ledout<="110"; ——点亮红灯
end if;
elsif(key_valid=`1` and judgecheck=`1`)then
——密码输入正确,执行以下功能
if(butt_code="1001")then ——如果想要改变密码
ledout<="101";
reset<=`1`;
j:=0;
end if;
if(reset=`1` and butt_code/="1001")then
if(staterecode="00" and j=0 and butt_code/="
1011")the ——最初状态
savedata(27 downto 24)<=butt_code;
j:=1;
——进入下一个状态循环(语句省略)
end if;
if(butt_code="1011" and j=7) the ——当按下确认键时
j:=0;
staterecode:="01"; ——进入第二次输入确认密码
check<=reset;
end if;
if(staterecode="01")then——确认是第二次输入密码的
状态
if(k=O and savedata(27 downto 24)=butt_code)then
k<=1;
——进入下一状态循环(语句省略)
else
k<=0;
end if;
if (butt_code="1011" and k=7)then
——如果二次密码输入相同,重置语句(语句省略)
dressout<="01100100";
dataout<=savedata;
elsif(butt_code="1011" and k/=7)then
k<=0; ——如果密码不相同,重新输入
ledout<="101";
end if;
end if;
end if;
if(key_valid=`l`andreset=`O`and butt_code/="1001") then
——菜的信息
if(namestate="000" and butt_code/="1011") then
——接收(语句省略)菜的名字,即0~64,如果输入
的数超过两个,则以最后两位为准
if(namestate="011") then
if(pricestate="000" and butt_code/="1011") then
savedata(27 downto 24)<=butt_code;
pricestate:="001";
ledout<="101";
——循环接收(语句省略)菜的信息,包括口味和价钱,如
果输入的数超过7位,
elsif(pricestate="111" and butt_code="1011") then
——则以最后输入的7位为准
——重置语句(略)
end if;