資源簡(jiǎn)介
數(shù)碼管多級(jí)菜單,51單片機(jī)按鍵掃描!帶proteus仿真,提供原理圖源程序。程序有詳細(xì)解釋!

代碼片段和文件信息
#include?
#include?
#define?uchar?unsigned?char
#define?uint??unsigned?int
sbit?ESC????=P1^0;
sbit?UP?????=P1^1;
sbit?DOWN???=P1^2;
sbit?ENTER??=P1^3;
uchar?layer?=?0;????????????//用于表示顯示的哪一級(jí)菜單?
uchar?sign?=?0;?????//要顯示的菜單號(hào),一共個(gè)菜單?
uchar?enable?=?4;?????//閃燈位,為0時(shí)不閃?
uchar?enabledata;????????//操作數(shù)用于閃燈????
struct?jigou{?????
????uchar?a;????????
????uchar?b;
????uchar?c;
????uchar?d;
????}parameter[]?=?{{0000}{1111}{2222}{3333}{4444}{5555}{6666}};??//各菜單下的顯示參數(shù),實(shí)際中讀24C02?
uchar?LEDData[]?=?{0xc00xf90xa40xb00x990x920x820xf80x800x980xff};???//數(shù)碼管顯示的值0-9,最后0xff是關(guān)顯示????????????
uchar?data1[4]?=?{0123};
uchar?dispdata[4]?=?{0123};?//顯示的菜單數(shù)據(jù)?
void?delay(uint?ms)???//?延時(shí)子程序??
{
uchar?k;
while(ms--)
{
??for(?k?=?0;?k?120;?k++?);
}
}
void?addparameter(?uchar?a?)???//當(dāng)layer=2時(shí),被UPKEY鍵掉用,實(shí)現(xiàn)操作數(shù)的加?
{
switch(a)
{
??case?0:
??enabledata?=++?parameter[sign].a;
??break;
??case?1:
??enabledata?=++?parameter[sign].b;
??break;
??case?2:
??enabledata?=++?parameter[sign].c;
??break;
??case?3:
??enabledata?=++?parameter[sign].d;
??break;
??default:
??break;
}
}
void?subparameter(?uchar?a?)???//當(dāng)layer=2時(shí),被DOWNKEY鍵調(diào)用,實(shí)現(xiàn)操作數(shù)的減?
{
switch(a)
{
??case?0:
??enabledata?=--?parameter[sign].a;
??break;
??case?1:
??enabledata?=--?parameter[sign].b;
??break;
??case?2:
??enabledata?=--?parameter[sign].c;
??break;
??case?3:
??enabledata?=--?parameter[sign].d;
??break;
??default:
??break;??
}
}
void?copymenu()????????//用五拷貝參數(shù)?,用于esckey鍵
{
dispdata[0]?=?sign;
dispdata[1]?=?10;
dispdata[2]?=?10;
dispdata[3]?=?10;
enabledata?=?sign;??????//用于功功能操作燈閃爍?
}
void?copy(void)???????//拷貝操作項(xiàng)的參數(shù)?
{
dispdata[0]?=?parameter[sign].a;
dispdata[1]?=?parameter[sign].b;
dispdata[2]?=?parameter[sign].c;
dispdata[3]?=?parameter[sign].d;
enabledata?=?dispdata[enable];??//用于功能操作燈閃爍?
}?
void?copyfre(void)???????//恢復(fù)最初的顯示,假設(shè)是當(dāng)前的運(yùn)行速度?
{
dispdata[0]?=?data1[0];
dispdata[1]?=?data1[1];
dispdata[2]?=?data1[2];
dispdata[3]?=?data1[3];
}?
void?esckey()?????//返回鍵處理程序???
{
if(?layer?==?0||layer?==?2?)?//當(dāng)操作層在0或2時(shí),反回到1layer
{?
?????enable?=?0;
??layer?=?1;??
??copymenu();
??return;
}
if(?layer?==?1?)??//當(dāng)layer在1層時(shí),返回到開機(jī)顯示的參數(shù)?
{
??layer=0;
??enable=4;
??copyfre();
}??
if(?layer?>?1?)????//當(dāng)操作層在2時(shí),返回第上級(jí)顯示界面?
{
??layer?=?1;
??enable?=?0;
??copymenu();
}
}?????????
void?upkey()?????//upkey處理程序
{
if(?layer?==?0?)???//在層0時(shí),不執(zhí)行操作?
??return?;????//在層1時(shí),參數(shù)項(xiàng)加1
if(?layer?==?1&&sign?6?)
{
????++sign;
????copymenu(?);
????return;
??}
??if(?layer?==?2&&dispdata[enable]?<9?)?//如果是在參數(shù)操作層,切操作數(shù)不大于9,參數(shù)相應(yīng)位加1
??{
???addparameter(enable?);
??copy();
??}
}
void?downkey()
{
if?(?layer?==?0?)
??return;
if(?layer?==?1&&0?{
????--sign;
????copymenu();
??}
??if(?layer?==?2&&0 ??{
???subparameter(?enable?);
??copy();
??}
}
void?enterkey()??????//dnterkey處理程序?
{
if
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????67958??2010-05-24?14:43??數(shù)碼管多級(jí)菜單自己調(diào)試\Backup?Of?snow.DBK
?????文件??????89253??2010-05-28?14:02??數(shù)碼管多級(jí)菜單自己調(diào)試\Backup?Of?數(shù)碼管多級(jí)菜單.DBK
?????文件???????4803??2012-02-28?22:54??數(shù)碼管多級(jí)菜單自己調(diào)試\cmian.c
?????文件???????9287??2012-02-28?22:54??數(shù)碼管多級(jí)菜單自己調(diào)試\cmian.LST
?????文件??????11115??2012-02-28?22:54??數(shù)碼管多級(jí)菜單自己調(diào)試\cmian.OBJ
?????文件??????67959??2010-05-24?15:48??數(shù)碼管多級(jí)菜單自己調(diào)試\Last?Loaded?snow.DBK
?????文件??????94939??2012-03-05?18:13??數(shù)碼管多級(jí)菜單自己調(diào)試\Last?Loaded?數(shù)碼管多級(jí)菜單?-?副本.DBK
?????文件??????94939??2012-02-27?12:44??數(shù)碼管多級(jí)菜單自己調(diào)試\Last?Loaded?數(shù)碼管多級(jí)菜單.DBK
?????文件???????9099??2012-02-27?15:47??數(shù)碼管多級(jí)菜單自己調(diào)試\ShowMenu.lst
?????文件??????11048??2012-02-27?15:47??數(shù)碼管多級(jí)菜單自己調(diào)試\ShowMenu.obj
?????文件??????10164??2012-02-27?18:26??數(shù)碼管多級(jí)菜單自己調(diào)試\snow
?????文件??????14472??2012-02-29?23:04??數(shù)碼管多級(jí)菜單自己調(diào)試\snow.c
?????文件???????3485??2012-02-27?18:26??數(shù)碼管多級(jí)菜單自己調(diào)試\snow.hex
?????文件??????29007??2012-02-27?18:26??數(shù)碼管多級(jí)菜單自己調(diào)試\snow.LST
?????文件??????16259??2012-02-27?18:26??數(shù)碼管多級(jí)菜單自己調(diào)試\snow.M51
?????文件??????12454??2012-02-27?18:26??數(shù)碼管多級(jí)菜單自己調(diào)試\snow.OBJ
?????文件???????1490??2012-03-10?19:46??數(shù)碼管多級(jí)菜單自己調(diào)試\snow.Opt
?????文件????????209??2012-03-10?19:50??數(shù)碼管多級(jí)菜單自己調(diào)試\snow.plg
?????文件????????910??2010-05-28?13:07??數(shù)碼管多級(jí)菜單自己調(diào)試\snow.PWI
?????文件???????2013??2012-02-27?18:00??數(shù)碼管多級(jí)菜單自己調(diào)試\snow.Uv2
?????文件???????1492??2012-03-07?21:25??數(shù)碼管多級(jí)菜單自己調(diào)試\snow_Opt.Bak
?????文件???????2132??2010-07-22?11:17??數(shù)碼管多級(jí)菜單自己調(diào)試\snow_Uv2.Bak
?????文件???????4805??2012-03-05?18:18??數(shù)碼管多級(jí)菜單自己調(diào)試\Text1.c
?????文件???????9445??2012-03-05?18:17??數(shù)碼管多級(jí)菜單自己調(diào)試\Text1.LST
?????文件??????11275??2012-03-05?18:17??數(shù)碼管多級(jí)菜單自己調(diào)試\Text1.OBJ
?????文件???????9399??2012-03-05?18:17??數(shù)碼管多級(jí)菜單自己調(diào)試\zijiban
?????文件???????2301??2012-03-05?18:17??數(shù)碼管多級(jí)菜單自己調(diào)試\zijiban.hex
?????文件??????13752??2012-03-05?18:17??數(shù)碼管多級(jí)菜單自己調(diào)試\zijiban.M51
?????文件???????1012??2012-03-07?21:24??數(shù)碼管多級(jí)菜單自己調(diào)試\zijiban.Opt
?????文件????????186??2012-03-07?21:24??數(shù)碼管多級(jí)菜單自己調(diào)試\zijiban.plg
............此處省略10個(gè)文件信息
評(píng)論
共有 條評(píng)論