第88节:单片机靠关键字快速截取有效数据串
时间:11-22
来源:互联网
点击:
- ceiveFlag=0;//清零完成标志
- ES = 1; // 允许接收中断
- }
- }
- void display_service() //显示的窗口菜单服务程序
- {
- //加了static关键字后,此局部变量不会每次进来函数都初始化一次,这样有可能减少了一点指令消耗的时间。
- static unsigned char ucTemp5; //中间过渡变量
- static unsigned char ucTemp4; //中间过渡变量
- static unsigned char ucTemp3; //中间过渡变量
- static unsigned char ucTemp2; //中间过渡变量
- static unsigned char ucTemp1; //中间过渡变量
- if(ucWd1Part1Update==1)//更新显示
- {
- ucWd1Part1Update=0;//及时清零标志,避免一直进来扫描
- //先分解数据用来显示每一位
- ucTemp5=ulWeightCurrent%100000/10000;
- ucTemp4=ulWeightCurrent%10000/1000;
- ucTemp3=ulWeightCurrent%1000/100;
- ucTemp2=ulWeightCurrent%100/10;
- ucTemp1=ulWeightCurrent%10;
- ucDigDot3=1;//显示第3位数码管的小数点,实际数据带2位小数点。
- ucDigShow8=10;//没有用到第8位数码管,因此显示无。10代表显示空。
- ucDigShow7=10;//没有用到第7位数码管,因此显示无。10代表显示空。
- ucDigShow6=10;//没有用到第6位数码管,因此显示无。10代表显示空。
- if(ulWeightCurrent<10000)
- {
- ucDigShow5=10;//如果小于1000,千位显示无
- }
- else
- {
- ucDigShow5=ucTemp5;//第5位数码管要显示的内容
- }
- if(ulWeightCurrent<1000)
- {
- ucDigShow4=10;//如果小于1000,千位显示无
- }
- else
- {
- ucDigShow4=ucTemp4;//第4位数码管要显示的内容
- }
- //因为带2位小数点,因此最前面3位数据都是有效数,必然要显示,不要判断去0的空显示处理。
- ucDigShow3=ucTemp3;//第3位数码管要显示的内容
- ucDigShow2=ucTemp2;//第2位数码管要显示的内容
- ucDigShow1=ucTemp1;//第1位数码管要显示的内容
- }
- }
- void display_drive()
- {
- //以下程序,如果加一些数组和移位的元素,还可以压缩容量。但是鸿哥追求的不是容量,而是清晰的讲解思路
- switch(ucDisplayDriveStep)
- {
- case 1://显示第1位
- ucDigShowTemp=dig_table[ucDigShow1];
- if(ucDigDot1==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xfe);
- break;
- case 2://显示第2位
- ucDigShowTemp=dig_table[ucDigShow2];
- if(ucDigDot2==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xfd);
- break;
- case 3://显示第3位
- ucDigShowTemp=dig_table[ucDigShow3];
- if(ucDigDot3==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xfb);
- break;
- case 4://显示第4位
- ucDigShowTemp=dig_table[ucDigShow4];
- if(ucDigDot4==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xf7);
- break;
- case 5://显示第5位
- ucDigShowTemp=dig_table[ucDigShow5];
- if(ucDigDot5==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xef);
- break;
- case 6://显示第6位
- ucDigShowTemp=dig_table[ucDigShow6];
- if(ucDigDot6==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xdf);
- break;
- case 7://显示第7位
- ucDigShowTemp=dig_table[ucDigShow7];
- if(ucDigDot7==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0xbf);
- break;
- case 8://显示第8位
- ucDigShowTemp=dig_table[ucDigShow8];
- if(ucDigDot8==1)
- {
- ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
- }
- dig_hc595_drive(ucDigShowTemp,0x7f);
- break;
- }
- ucDisplayDriveStep++;
- if(ucDisplayDriveStep>8)//扫描完8个数码管后,重新从第一个开始扫描
- {
- ucDisplayDriveStep=1;
- }
- }
- //数码管的74HC595驱动函数
- void dig_hc595_drive(unsigned char ucDigStatusTemp16_09,unsigned char ucDigStatusTemp08_01)
- {
- unsigned char i;
- unsi
单片机关键字有效数据 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)