资源简介
数码管多级菜单,51单片机按键扫描!带proteus仿真,提供原理图源程序。程序有详细解释!

代码片段和文件信息
#include < reg51.h >
#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 )
{
--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个文件信息
相关资源
- 【单片机】51单片机数码管显示万年历
- 25.数码管显示0-99
- STC12C5A60S2 CH4521 驱动数码管 显示
- CH454键盘与数码管显示程序
- 基于EWB软件的数码管显示控制器
- 单片机电子琴 数码管显示
- 74hc244驱动数码管显示电路及程序
- 数码管字体
- STM32F407实时时钟_DS1302实时时钟模块和
- 基于STM32F103的实时时钟程序,采用D
- 51单片机_DS1302时钟芯片_共阴数码管
- 倒计时与选手数码管编号显示的四人
- 基于STM32+TM1638芯片的共阳极数码管驱
- 第五章 畅学多功能实验箱4位一体数码
- 畅学ARM多功能实验箱数码管显示源码
- 51单片机数码管滚动显示hello
- 米字数码管取模
- DXP元件库、封装库,常用LED库、数码
- 红外遥控数码管显示.zip
- 51单片机交通灯 源代码+proteus仿真图
- 数字钟数码管显示时分秒
- 基于FPGA的DS18B20单总线控制+数码管显
- stm32控制74h595驱动四位数码管
- stm32 控制 数码管显示以及LCD显示
- stm32驱动MAX7219控制数码管显示.zip
- FPGA 使用verilog 编写的AD tlc549 测试程序
- Verilog编写6位数码管显示计数,每条语
- 595显示数码管驱动
- 利用proteus完成8255相关要求
- opencv数码管识别程序
评论
共有 条评论