资源简介
数码管多级菜单,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个文件信息
相关资源
- 74LS47驱动7段数码管实验
- 8只数码管滚动显示数字串
- VHDL三人表决器带数码管字符显示
- proteus-8位数码管显示
- 数码管显示的简易计算器
- 数码管驱动芯片TM1637的51程序
- 2位数码管封装
- 松翰单片机定时中断数码管程序
- verilog实现八位数码管显示
- 数码管原理图库
- KNN识别LED数码管
- AD采集数据在数码管上显示
- 基于51单片机的简单计算器数码管显示
- 基于51单片机定时器实现的数字时钟
- stm32+MAX7219数码管模块显示程序 spi接口
- 24C02存储显示计时时间
- 8255扩展4*4按键
- TM1616驱动四位数码管
- 液晶数码管字体汇总(共22款)
- c51使用ds18b20测试温度使用数码管显示
- c51单片机数码管显示温度
- 数码管驱动TM1640驱动程序
- Verilog HDL实现数码管动态扫描
- DS18B20+lcd1602显示+LED数码管显示
- 超声波测距模块的Verilog代码
- verilog实现pwm输出按键控制数码管显示
- 4位七段数数码管显示
- 基于AT89C852单片机的8位竞赛抢答器原
- 6/4开关磁阻电机开环运行程序基于5
- 安卓数码管字体
评论
共有 条评论