前几天看了一本书,叫《电子设计从零开始》,好像是清华大学出版社的,一个英国人做的序。看了几章,觉得太惭
愧了,作为电子类专业的学生,看来我真的试着多做做电路,提高一下实践水平。其中作者提到了一个音频的功率放大器,作者说,这个电路如果能做到看懂的话,那么离能自己设计这个电路,起码要从事这类工作三年以上。我一看那复杂程度,直接晕了。
看来我还得好好努力,大四也得再把自己的知识扩充一下,没有硬件可以用Multism仿真一下嘛。先来基础的吧,那个电路实在有点复杂。
这几天又把信号发生器部分的软件部分做出来了,还是基于软件模拟,做硬件的同学生病,硬件部分还没有完成,而我对FPGA 部分和硬件电路方面不是很擅长只能是软件模拟一下。信号发生器部分是用FPGA来完成的,那么我的界面上只需示意性的显示一下是什么波形就行了,比如要产生方波,那么我在绘图区域画个方波就行,至于控件嘛,信号发生器应该包含,峰值,信号频率,占空比等的设定,由于觉得外加个键盘有点麻烦,硬件部分驱动可能又要费很大功夫,因此采用触屏按键,就是在面部上做个软键盘。
这个问题可把我难住了,原来计划是将峰值电压和频率都用EDIT控件来显示,但是无法做到用选择一个EDIT框,然后这时候按软键盘,然后将输入的数据显示在EDIT框中。因为,设定EDIT框的字符是需要EDIT框的句柄的,而只是点一下,让光标出现在那里就选择这个框,好像不行,就算是EDIT框的Notification Codes里有个WM_NOTIFICATION_CLICKED可以识别选中(但是要点两下),然后设置显示,但是这样并不是按一个按钮就显示一个字符。后来又想了想,我们要做的信号发生器输出的电压顶多不超过20V,还是用个SLIDER吧,于是这样一改,就基本实现我所要的功能了。
但是还有个问题,由于没有一本书对UCGUI的窗口机制等做出详细的介绍,只有手册,手册介绍的功能很简单(我觉得可能现在uCGUI现在的版本一直在更新,而这个公司是盈利的,后面就不可能完全的开源了,网上的源码也是以前的低版本和搞版本拼凑的,因此没有一本书对它的机制做一个详细的剖析),无法完成 退出一个界面,然后重新进入功能选择界面。我先是查了手册,尝试用个WM_HideWindow(),不行,然后又试了试将窗口删了再重新创建,还是不行,总之很多问题。归根结底还是对其
运行机制不了解,窗口消息是如何发送不清楚。
后面想了个笨办法,在一个while(1)循环里,建立了三个阻塞型的对话框,这样当选定功能后,结束这个对话框,然后进入实现
相应的功能的对话框,当推出后进入下一次循环,即又到了功能选择界面。
while(1)
{
GUI_ExecDialogBox(_a_INIT_DialogCreate, GUI_COUNTOF(_a_INIT_DialogCreate), &_INIT_Callback, 0, 0, 0);
if(Id==GUI_ID_ARB)//这个是示波器的功能,Id是全局的变量
{
GUI_Clear();
arb_show=0;
BackGround();
GUI_ExecDialogBox(ARB_DialogCreate, GUI_COUNTOF(ARB_DialogCreate), &ARB_Callback, 0, 0, 0);
}
else if(Id==GUI_ID_SIGNAL)//这个是信号发生器的功能
{
GUI_Clear();
BackGround();
GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
}
GUI_Delay(1000);//根据手册里,GUI_Delay()函数起始页可以实现GUI_Exec()的功能,就是窗口重绘
}运行效果如下
具体的工程我就不发了,因为现在还在完善中,这还很简陋。
本文分享了在设计信号发生器软件过程中遇到的问题及解决方法,包括如何使用SLIDER控件替代EDIT控件输入信号参数,以及通过循环建立阻塞型对话框实现界面间的切换。
3037

被折叠的 条评论
为什么被折叠?



