資源簡介
數碼管多級菜單,51單片機按鍵掃描!帶proteus仿真,提供原理圖源程序。程序有詳細解釋!

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