微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第28节:数码管通过切换窗口来设置参数

第28节:数码管通过切换窗口来设置参数

时间:11-22 来源:互联网 点击:

unsigned char ucDigShowTemp=0; //临时中间变量
unsigned char ucDisplayDriveStep=1;//动态扫描数码管的步骤变量

unsigned char ucWd1Update=1; //窗口1更新显示标志
unsigned char ucWd2Update=0; //窗口2更新显示标志
unsigned char ucWd3Update=0; //窗口3更新显示标志
unsigned char ucWd4Update=0; //窗口4更新显示标志

unsigned char ucWd=1;//本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。

unsigned intuiSetData1=0;//本程序中需要被设置的参数1
unsigned intuiSetData2=0;//本程序中需要被设置的参数2
unsigned intuiSetData3=0;//本程序中需要被设置的参数3
unsigned intuiSetData4=0;//本程序中需要被设置的参数4

unsigned char ucTemp1=0;//中间过渡变量
unsigned char ucTemp2=0;//中间过渡变量
unsigned char ucTemp3=0;//中间过渡变量
unsigned char ucTemp4=0;//中间过渡变量

//根据原理图得出的共阴数码管字模表
code unsigned char dig_table[]=
{
0x3f,//0 序号0
0x06,//1 序号1
0x5b,//2 序号2
0x4f,//3 序号3
0x66,//4 序号4
0x6d,//5 序号5
0x7d,//6 序号6
0x07,//7 序号7
0x7f,//8 序号8
0x6f,//9 序号9
0x00,//无 序号10
0x40,//- 序号11
0x73,//P 序号12
};

void main()
{
initial_myself();
delay_long(100);
initial_peripheral();
while(1)
{
key_service(); //按键服务的应用程序
display_service(); //显示的窗口菜单服务程序
}

}

/* 注释一:
*鸿哥首次提出的"一二级菜单显示理论":
*凡是人机界面显示,不管是数码管还是液晶屏,都可以把显示的内容分成不同的窗口来显示,
*每个显示的窗口中又可以分成不同的局部显示。其中窗口就是一级菜单,用ucWd变量表示。
*局部就是二级菜单,用ucPart来表示。不同的窗口,会有不同的更新显示变量ucWdXUpdate来对应,
*表示整屏全部更新显示。不同的局部,也会有不同的更新显示变量ucWdXPartYUpdate来对应,表示局部更新显示。
*/

void display_service() //显示的窗口菜单服务程序
{

switch(ucWd)//本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
{
case 1: //显示P--1窗口的数据
if(ucWd1Update==1)//窗口1要全部更新显示
{
ucWd1Update=0;//及时清零标志,避免一直进来扫描

ucDigShow8=12;//第8位数码管显示P
ucDigShow7=11;//第7位数码管显示-
ucDigShow6=1; //第6位数码管显示1
ucDigShow5=10;//第5位数码管显示无

/* 注释二:
* 此处为什么要多加4个中间过渡变量ucTemp?是因为uiSetData1分解数据的时候
* 需要进行除法和求余数的运算,就会用到好多条指令,就会耗掉一点时间,类似延时
* 了一会。我们的定时器每隔一段时间都会产生中断,然后在中断里驱动数码管显示,
* 当uiSetData1还没完全分解出4位有效数据时,这个时候来的定时中断,就有可能导致
* 显示的数据瞬间产生不完整,影响显示效果。因此,为了把需要显示的数据过渡最快,
* 所以采取了先分解,再过渡显示的方法。
*/

//先分解数据
ucTemp4=uiSetData1/1000;
ucTemp3=uiSetData1%1000/100;
ucTemp2=uiSetData1%100/10;
ucTemp1=uiSetData1%10;

//再过渡需要显示的数据到缓冲变量里,让过渡的时间越短越好
ucDigShow4=ucTemp4;//第4位数码管要显示的内容
ucDigShow3=ucTemp3;//第3位数码管要显示的内容
ucDigShow2=ucTemp2;//第2位数码管要显示的内容
ucDigShow1=ucTemp1;//第1位数码管要显示的内容
}

break;
case 2://显示P--2窗口的数据
if(ucWd2Update==1)//窗口2要全部更新显示
{
ucWd2Update=0;//及时清零标志,避免一直进来扫描

ucDigShow8=12;//第8位数码管显示P
ucDigShow7=11;//第7位数码管显示-
ucDigShow6=2;//第6位数码管显示2
ucDigShow5=10; //第5位数码管显示无

ucTemp4=uiSetData2/1000; //分解数据
ucTemp3=uiSetData2%1000/100;
ucTemp2=uiSetData2%100/10;
ucTemp1=uiSetData2%10;

ucDigShow4=ucTemp4;//第4位数码管要显示的内容
ucDigShow3=ucTemp3;//第3位数码管要显示的内容
ucDigShow2=ucTemp2;//第2位数码管要显示的内容
ucDigShow1=ucTemp1;//第1位数码管要显示的内容
}
break;
case 3://显示P--3窗口的数据
if(ucWd3Update==1)//窗口3要全部更新显示
{
ucWd3Update=0;//及时清零标志,避免一直进来扫描

ucDigShow8=12;//第8位数码管显示P
ucDigShow7=11;//第7位数码管显示-
ucDigShow6=3;//第6位数码管显示3
ucDigShow5=10; //第5位数码管显示无

uc

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top