📄 key_prc.lst
字号:
693 1 disp_mode = SECOND_MENU_DISP ;
694 1 select_position = select_position_old ;
695 1 disp_no_u_old = 6 ;
696 1 disp_no_u = 0;
697 1 }
698
699
700
701 /**********************************************************/
702 /* mes_list指针指向的是在二级界面菜单显示时,待显示的链表**/
703 /*中的某一处,首次进入二级菜单时 mes_list -> disp_tcb_list*/
704 /**********************************************************/
705 unsigned char Judge_mes_num(void)
706 {
707 1 unsigned char i ;
708 1
709 1 if(mes_list == &MES_NULL) //无信息就返回0
710 1 return 0;
711 1 mes_list_old = mes_list ; //为了显示*形所用
712 1 /*经过以下处理,mes_list指向该屏的信息内存块的末端*/
713 1 for(i=0;i<5;i++) //最多只判5条
714 1 {
715 2 if(mes_list ->next != &MES_NULL)
716 2 {
717 3 mes_list = mes_list -> next ;
718 3 }
719 2 else
720 2 {
721 3 last_mes_list = mes_list;
722 3 mes_list = &MES_NULL;
723 3 i++;
724 3 break;
725 3 }
726 2 }
727 1
728 1 return i;
729 1 }
730
731
732
733 /*******************************************************/
734 /*******************************************************/
735 unsigned char R_judge_mes_num(void)
736 {
737 1 unsigned char i=0 ;
C51 COMPILER V7.06 KEY_PRC 06/10/2005 13:26:28 PAGE 13
738 1 struct MES_CON_BLOCK *p = mes_list;
739 1 if((mes_list == &MES_NULL)&&(last_mes_list != &MES_NULL))
740 1 {
741 2 p = last_mes_list;
742 2 }
743 1 if(p->next == &MES_NULL)
744 1 i=1;
745 1 for(;i<5;i++)
746 1 {
747 2 // if(p->prev != (struct MES_CON_BLOCK xdata *)END)
748 2 if(p->prev != &MES_NULL)
749 2 p = p -> prev ;
750 2 else
751 2 {
752 3 i++;
753 3 break;
754 3 }
755 2
756 2 }
757 1 mes_list_old = p ;
758 1 return i;
759 1 }
760
761
762 /*******************************************************/
763 /*******************************************************/
764 void In_third_menu(void)
765 {
766 1 disp_mode = THIRD_MENU_DISP;
767 1 content_disp_F = P_DISP ;
768 1 select_position_old = select_position; //阅读信息后返回时正常情况下仍选中该条信息
769 1 disp_no_u_old= 6; //disp_no_u不可能达到6
770 1 disp_no_u=0;
771 1 }
772
773
774 /*******************************************************/
775 /*******************************************************/
776 void Get_mes_content(unsigned char scr_disp_num,unsigned char select)
777 {
778 1
779 1 struct MES_CON_BLOCK xdata *p;
780 1 if(mes_list == &MES_NULL)
781 1 {
782 2 p = last_mes_list;
783 2 scr_disp_num --;
784 2 }
785 1 else
786 1 p=mes_list ;
787 1 while(scr_disp_num-- > select)
788 1 p=p->prev;
789 1
790 1 mes_content = (unsigned char xdata*)p->mes_addr.address.address;
791 1 read_mes_page_adr =(unsigned char)(p->mes_addr.address.page_addr) ;
792 1 p->new_old_F = OLD; //进入该信息阅读,表示信息是旧的
793 1 /*以下为编删除信息时增加*/
794 1 del_mes_p = p ; //将现在这条信息的控制块存入,以备删除信息时用
795 1 }
796
797 /*******************************************************/
798 /* 该函数为删除信息时需处理的动作 */
799 /*******************************************************/
C51 COMPILER V7.06 KEY_PRC 06/10/2005 13:26:28 PAGE 14
800 void Del_mes_prc(void)
801 {
802 1
803 1 if(del_mes_p == last_mes_list ) //如果删除的信息是列表中的最后一条
804 1 {
805 2 if(last_mes_list->prev !=&MES_NULL) //不是第一条
806 2 {
807 3 last_mes_list = last_mes_list->prev;
808 3 select_position_old -= 1; //防止将选择框移到"返回" 处
809 3 }
810 2 else //删除的是最后一条信息
811 2 {
812 3 last_mes_list = &MES_NULL ;
813 3 }
814 2 }
815 1 Del_disp_tcb_block(del_mes_p); // 从显示链表中脱开,然后放回到空链表中
816 1 list_num--; //总的信息数减1
817 1 scr_mes_num--; //当前这一屏的信息数量减1
818 1 if(scr_mes_num != 0)
819 1 Return_second_menu(scr_mes_num); //直接返回二级菜单
820 1 else //这一屏已没有信息列表了,那么返回上一屏列表
821 1 {
822 2 if(list_num >= 5) //之前有超过5条信息
823 2 Return_second_menu(5);
824 2 else //之前不超过5条
825 2 Return_second_menu(list_num);
826 2
827 2 select_position = 0; //新屏的选项位置重新从第一行信息位置开始
828 2 }
829 1
830 1 }
831
832 /************************************************/
833 /************************************************/
834
835 void Get_num_code(unsigned char num)
836 {
837 1 unsigned char i;
838 1 if(num>=100)
839 1 {
840 2 i= num/100;
841 2 (unsigned int)num_code[0]= num_to_code[i];
842 2 num = num%100;
843 2 i=num/10;
844 2 (unsigned int)num_code[2]= num_to_code[i];
845 2 i = num%10;
846 2 (unsigned int)num_code[4]= num_to_code[i];
847 2 num_code[6]='\0';
848 2 }
849 1 else if(num>=10)
850 1 {
851 2 i=num/10;
852 2 (unsigned int)num_code[0]= num_to_code[i];
853 2 i = num%10;
854 2 (unsigned int)num_code[2]= num_to_code[i];
855 2 num_code[4]='\0';
856 2 }
857 1 else
858 1 {
859 2 i = num;
860 2 (unsigned int)num_code[0]= num_to_code[i];
861 2 num_code[2]='\0';
C51 COMPILER V7.06 KEY_PRC 06/10/2005 13:26:28 PAGE 15
862 2 }
863 1 }
864
865 /************************************************/
866 /************************************************/
867 void Get_list_str(unsigned char num)
868 {
869 1 // memset(list_str,0x00,11); //clear list_str
870 1 register char i=0 ;
871 1
872 1 while(i < 11)
873 1 *(list_str + i++)= 0x00;
874 1
875 1 Get_num_code(num);
876 1 strcat(list_str,"第");
877 1 strcat(list_str,num_code);
878 1 strcat(list_str,"条");
879 1 }
C51 COMPILER V7.06 KEY_PRC 06/10/2005 13:26:28 PAGE 16
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Key_dummy (BEGIN)
; SOURCE LINE # 66
; SOURCE LINE # 67
; SOURCE LINE # 69
0000 ?C0001:
0000 22 RET
; FUNCTION Key_dummy (END)
; FUNCTION Key_hd (BEGIN)
; SOURCE LINE # 75
; SOURCE LINE # 76
; SOURCE LINE # 77
0000 120000 R LCALL Key_scan
; SOURCE LINE # 78
0003 E500 E MOV A,key_tmr
0005 6003 JZ ?C0002
; SOURCE LINE # 79
0007 1500 E DEC key_tmr
0009 22 RET
000A ?C0002:
; SOURCE LINE # 81
; SOURCE LINE # 82
000A 750002 E MOV key_tmr,#02H
; SOURCE LINE # 83
000D 120000 R LCALL Key_judge
0010 5003 JNC ?C0005
; SOURCE LINE # 84
0012 120000 R LCALL Con_key
; SOURCE LINE # 85
; SOURCE LINE # 87
0015 ?C0005:
0015 22 RET
; FUNCTION Key_hd (END)
; FUNCTION Key_scan (BEGIN)
; SOURCE LINE # 91
; SOURCE LINE # 93
; SOURCE LINE # 95
0000 43B018 ORL P3,#018H
; SOURCE LINE # 97
0003 E5B0 MOV A,P3
0005 F4 CPL A
0006 5418 ANL A,#018H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -