① c语言结构体实现多级菜单的困惑,请高手解答
missing ';' before 'code' :在code前面少了一个分号
但看你代码是没有问题的。
应该是你在头文件里的宏定义多了个分号 或者少了个分号
② 在c语言中,一个菜单套着一个菜单,如何从二级菜单跳回一级菜单
1、首先在打开的C语言编程软件中,编写这个【homePage】函数。
③ 求单片机的汇编语言教程视频。。。网上大多是c语言的( ̄▽ ̄)超级感谢
学习汇编没有什么意义,学习C就可以了。
④ 单片机c语言哪个视频教程好
不请自来!
之前虽然学过单片机C语言,但是大同小异。
2010年左右,用的郭天祥的视频,还算可以。不知道现在如何了,年代有点远,脱离久了,会不会落伍。
⑤ 如何用c语言在lcd显示屏上建个多级菜单
raise语法格式如下:
raise [Exception [, args [, traceback]]]
⑥ 求单片机+液晶 的多级菜单原理
本人没有实际做过 ,不知道是否对你有帮助!
以8031 单片机 控制MGLS-240128液晶显示器为例,介绍利用CCDOS中的汉字库(HzK16)实现多级汉字菜单显示的方法。当显示内容改变时,不需要更改程序,只要更改菜单参数即可显示。
关键词: 液晶显示器;MGLS-240128;汉字库;多级菜单
1. 引言
目前常用的小型显示器有LCD和LED ,LED显示器只能显示数字和有限个英文字符,不能显示汉字,显示内容不直观,操作人员只能根据约定格式了解显示内容。而LCD则可显示各种汉字和图形,能实现中文菜单显示,便于操作,并且功耗低。因此LCD得到广泛应用。用LCD显示汉字时,一般采用自制汉字模和汉字编码,当显示内容较多时, 字模库容量很大,汉字的编码亦很难记住,给编程造成困难,当显示内容改变时,字模库也要作相应变化,工作量大。这里介绍一种直接利用CCDOS中的汉字库(HZK16)显示汉字多级菜单的方法。将HZK16和菜单内容固化在EPROM中,从而方便地实现了多级汉字菜单的显示,充分发挥了LCD的优点。
2. MGLS-240128显示模块简介及接口电路
本文使用的显示模块是MGLS-240128,它的点阵数是240×128,如显示16×16点阵的汉字,可显示8行,每行15个字。MGLS-240128模块内藏HD61830控制器,模块的电原理框图如图1所示。
有时在菜单显示中,显示的页数很多。为了便于在EPROM中定位,在计算机中编辑菜单时,应在每页菜单前加pxx:其中p表示一页开始,xx为该页序号,冒号表示以下为该页的内容。回车可换行到下一行并进入中文编辑状态输入,需要显示的内容。每页分8行,每行15个汉字或字符(包括空格)。在编辑的文件中,每行结尾有回车、换行符。这样,每一页菜单中,pxx以ASCII码形式存放,每个汉字以机器内码形式存放,每个机器内码占两字节。每行结束还有回车换行符,共有9行。这样每页长度为4+8×15×2×+9×2=262字节。若一共有40页,则存储器共需:40×262=10480字节。图2给出一菜单示例。国标GB2312-80把汉字分为94区,每区94个字符。其中1~15区是图形符号和字母,16~55区是一级汉字,共3755个。对于一般显示,前55区就足够了。在HZK16中,每一字符占32字节,共需32×55×94=165440字节。
为了存储汉字字模和显示内容,约需180k字节存储器,可选用一片27020。其硬件原理图如图3所示,为了简便起见,只画出光标移动键、回车键和返回键,供操作时参考。图中的ROM分为两部分,一部分是2764,内装用户程序,一部分是27020,内装字库和菜单,因为程序必须从0000H开始执行,所以2764的地址空间为0000H~1FFFH,27020的地址空间为8000H~FFFFH。
3. 利用CCDOS中的汉字库显示汉字
在计算机汉字系统中,每个汉字内码为二字节编码,字节的最高位置1,而ASCII码为7位编码,最高位为0。因此,可根据字符值大于还是小于128来判断它是汉字还是ASCII码。汉字地址码是指在一个汉字库中,某一汉字字形信息存放在库中的逻辑地址的编码。地址码=[(内码第一字节-AIH)×94+(内码第二字节-AIH)]×32。
27020被分为8区,每区占32k字节。汉字字模存于0~6区,而菜单存在第7区,通过P1口实现选区。因此,寻找一个汉字的字模信息首先要确定此汉字所处的区数;再确定在此区中的地址(字模地址)。区数号=地址码/32768的商。字模地址=(地址码/32768的余数)×32+8000H。如汉字“唐”的机器内码是CCC6H,地址码=[(CCH-AIH)×94+(C6H-AIH)]×32=4079×32。区数号=4079×32/32768的商=4,字模地址=(4079×32/32768的余数)×32+8000=83E0H。
由于在图形方式下,显示一个汉字的介绍文章很多,而且方法也大同小异,因此不再详细介绍一个汉字的显示过程,这里只给出一个流程。如图4所示。
4. 一页菜单的显示方法
显示16×16点阵的汉字时,显示屏被划为8×15个方格。每页菜单也是8×15个字符,排列格式一样,因此每个字符可被放在一个方格内。若每页菜单中的字符坐标记为x,y,表示字符位于显示屏的第x行,第y列方格内。坐标原点在左上角。一页菜单的显示流程图如图5所示。
5. 多级菜单的显示
显示菜单时,需把光标放在菜单和第一选项序号处,当要选其他项时,按动光标移动键,使光标放到待选项序号处,再按回车键,便进入下一级菜单。当要返回上一级菜单时,按返回键即可。为了达到以上的要求,首先要为每页菜单建立一个表格(菜单表格),表格的内容(即菜单参数)如下:第一字节放此页菜单待选项数。后面依次放各选项序号在屏幕中的x,y坐标和选项所对应菜单在EPROM中的首地址。这样,每个选项占四字节,最后两字节放在上级菜单在EPROM中的首地址。为了便于寻找,应使每个表格长度一样,至少应等于选项数最多的那页菜单所需的表格长度。如最多选项有8个,则格长度=1+8×4+2=35。如果某页菜单无选项,除了表格中最后两字节填上级菜单的地址外,其余地方填0。把所有的表格按页号顺序放在一起,形成一个总表格。把其首地址称为表格基地址。在程序中给每级菜单都设一个选项计数器。初值为0,每按一下光标移动键,选项计数器加1。光标处汉字反白(黑底白字),一般汉字为白底黑字。实现过程如下:由需反白字符的x,y值算出此字符字模在显示缓冲区(DDRAM)中的位置,从DDRAM中读出字模并取反白后送回原处。
光标显示子程序如图6所示,键处理子程序如图7所示。
6. 结束语
在实际工作中运用此技术显示多级菜单时,由于编程简单方便,避免了自制汉字库的繁杂工作。并且可以把整个程序作为一个模块,只需更改菜单表格的内容(即菜单参数),就可显示各种内容的菜单。为了操作更方便,可加光标上移键。当末级菜单有多页时,可加翻页键。
⑦ 请教C语言中如何编写二级菜单
用switch和goto吧,可能会乱点,但是个简单的办法.
level1:printf("...");
/*程序一级菜单*/
switch(scanf("%d",&choice),choice){
case
1:printf("...");
/*程序二级菜单*/
scanf("%d",&choice);
if(4==choice)goto
level1;
else
switch(choice){
/*...*/
}
break;
case
2:
/*...*/
⑧ 求郭天祥十天学会单片机和C语言视频教程,迅雷下载地址也可,不要电驴。多谢
郭天祥《十天学会单片机和C语言编程》 13讲完整视频教程+配套完整PPT课件已传网络附件栏.
希望有所帮助 ! 满意的亲记得采纳哦! 谢谢啦!
⑨ c语言环境下 怎样创建一个多级目录 并且实现目录管理
BOOL SelPackDirDlg::CreateMultiFolder(CString cstrPath)
{
BOOL bRet = TRUE;
LPCSTR lpcstrParent;
CString cstrParent;
int iPos = 0;
int iLen;
if(cstrPath.IsEmpty()) return FALSE;
iLen = cstrPath.GetLength();
iPos = cstrPath.ReverseFind('\\');
cstrParent = cstrPath.Left(iPos);
if(cstrParent.IsEmpty()) return FALSE; // 目录名称错误
lpcstrParent = cstrParent.Left(cstrParent.GetLength());
if(cstrParent.GetLength() > 3) // 如果长度小于3,表示为磁盘根目录
bRet = IsExistDirectory(lpcstrParent);// 检查父目录是否存在
if(!bRet)
bRet = CreateMultiFolder(lpcstrParent); // 父目录不存在,递归调用创建父目录
if(bRet){ // 父目录存在,直接创建目录
bRet = CreateDirectory(cstrPath, NULL);
}
return bRet;
}
BOOL SelPackDirDlg::IsExistDirectory(CString cstrPath)
{
BOOL bExist;
WIN32_FIND_DATA wfd; // 查找
HANDLE hFind = FindFirstFile(cstrPath, &wfd);
if(hFind == INVALID_HANDLE_VALUE) {// 没有找到配备,目录肯定不存在
bExist = FALSE;
}
else{ // 检查找到的结果是否目录
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
bExist = TRUE; // 存在,是目录
else
bExist = FALSE; // 存在,不是目录
FindClose(hFind);
}
return bExist;
}//****************************** End. ************************/
基本思路是这样的,可以按个人要求定做
⑩ 用C语言写的多级菜单源程序(单片机),自己试验过,不要网上拷贝过来,谢谢。
先看第一层菜单
{ 0, 0, 0, 1, 0, MainJob1 }
菜单的索引号为0,这个是可以自己随便定义的,但不要超过255,因为你的索引已经声明uchar了,
第二个0,按下向上键的时候,跳到索引号为0的菜单,也就是,保持现在的界面,第三个0也是一样,第四个1,按下回车的时候,跟到索引号为1的菜单,MainJob1一般是一个当然按键的功能函数,或是界面显示函数
这样说,不知道你能明白不?
{1 ,7 ,2 ,8 ,0 , Dsp Point}
1------是当前的索引号
7------按下向上的时候,跳到7号索引的菜单
2------按下向下的时候,跳到2号索引的菜单
8------按下回车的时候,跳到8号索引的菜单
0------按下回车的时候,跳到0号索引菜单,也就是返回到主界面了
至于说,怎么赋值的,其实就是看你自己想怎么设计你的菜单了,
当前的索引号,你自己定义
按下什么按键时,想跳到哪一个索引的菜单,就是这样了