📄 lcd.lst
字号:
665 /* 输 入: */
666 /* col 图型的起始位置0~121 */
667 /* layer 图形的位置(Y坐标)0-下半部分 非0-上半部分 */
668 /* ascii_code 所要显示德ASCCII码 */
669 /* mode 显示模式,0正显,1反显 */
670 /* */
671 /* 输 出:无 */
672 /* */
673 /* 历史记录: */
674 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
675 /****************************************************************************/
C51 COMPILER V7.09 LCD 10/09/2005 20:45:34 PAGE 12
676 void disp_one_ascii(u_char col,u_char layer,u_char ascii_code,u_char mode)
677 {
678 1 u_char i,temp;
679 1 temp = ascii_code;
680 1 for (i=0; i<16; i++) /*ASCII码显示占用16个字节*/
681 1 {
682 2 if (mode)
683 2 dot_buffer[i]=~ascii_tab[(ascii_code-0x20)*16 + i];
684 2 else
685 2 dot_buffer[i]= ascii_tab[(ascii_code-0x20)*16 + i];
686 2 }
687 1 draw_bmp(col,layer,8,dot_buffer);
688 1 }
689
690 /****************************************************************************/
691 /* 函数名:disp_ram_data */
692 /* 功 能:显示小于14位的十进制数字 */
693 /* 作 者:spot */
694 /* 输 入: */
695 /* col 图型的起始位置0~121 */
696 /* layer 图形的位置(Y坐标)0-下半部分 非0-上半部分 */
697 /* n 所要显示的十进制数字长度 */
698 /* mode 显示模式,0正显,1反显 */
699 /* */
700 /* 输 出:无 */
701 /* */
702 /* 历史记录: */
703 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
704 /****************************************************************************/
705 void disp_ram_data(u_char col,u_char layer,u_char n,u_char mode)
706 {
707 1 while(n--)
708 1 {
709 2 if (mode)
710 2 disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
711 2 else
712 2 disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
713 2
714 2 col += 8;
715 2 }
716 1 }
717
718 /****************************************************************************/
719 /* 函数名:dprintf */
720 /* 功 能:通用混合字串显示 */
721 /* 作 者:spot */
722 /* 输 入: */
723 /* col 图型的起始位置0~121 */
724 /* layer 图形的位置(Y坐标)0-下半部分 非0-上半部分 */
725 /* ptr 显示字串指针 */
726 /* mode 显示模式,0正显,1反显 */
727 /* */
728 /* 输 出:无 */
729 /* */
730 /* 历史记录: */
731 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
732 /****************************************************************************/
733 void dprintf(u_char col,u_char layer,u_char *ptr,u_char mode)
734 {
735 1 u_char c1,c2;
736 1 u_char i,j,k;
737 1 u_char ulen;
C51 COMPILER V7.09 LCD 10/09/2005 20:45:34 PAGE 13
738 1 u_char ucol,ulayer;
739 1
740 1 ulen = 0;
741 1 ucol = col;
742 1 ulayer = layer;
743 1
744 1 while (ptr[ulen]!= 0)
745 1 {
746 2 ulen++; /* 探测字串长度 */
747 2 }
748 1
749 1 i=0;
750 1 while (i<ulen)
751 1 {
752 2 c1 = ptr[i];
753 2 c2 = ptr[i+1];
754 2
755 2 /* ASCII字符与汉字内码的区别在于128做分界;大于128的为汉字码 */
756 2 if(c1 <=128) /* ASCII */
757 2 {
758 3 if (mode)
759 3 disp_one_ascii(ucol,ulayer,c1,1);
760 3 else
761 3 disp_one_ascii(ucol,ulayer,c1,0);
762 3
763 3 ucol+=8;
764 3 i++; /* ASCII码的处理 */
765 3 }
766 2 else /* 中文 */
767 2 {
768 3 for (j=0; j<sizeof(hz16)/sizeof(hz16[0]); j++)
769 3 { /* 查找定位当前汉字的点阵区 */
770 4 if ((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
771 4 break;
772 4 }
773 3
774 3 for (k=0; k<32; k++)
775 3 {
776 4 if (mode)
777 4 dot_buffer[k]=~hz16[j].zimo[k];
778 4 else
779 4 dot_buffer[k]= hz16[j].zimo[k];
780 4 }
781 3
782 3 draw_bmp(ucol,ulayer,16,dot_buffer);
783 3 ucol += 16;
784 3 i += 2; /* 中文的处理 */
785 3 }
786 2 }
787 1 }
788
789
790 /****************************************************************************/
791 /* 函数名:num_to_buff */
792 /* 功 能:将数值转换为ASCII序列,保存在全局变量显示缓冲区中,内部使用 */
793 /* 作 者:spot */
794 /* 输 入:num */
795 /* 输 出:无 */
796 /* */
797 /* 历史记录: */
798 /* spot 2005-06-28 Creat Inital version. (Version 1.0) */
799 /****************************************************************************/
C51 COMPILER V7.09 LCD 10/09/2005 20:45:34 PAGE 14
800 void num_to_buff(u_int num)
801 {
802 1 u_int i=0;
803 1 for (i=0; i<14; i++)
804 1 {
805 2 disp_buffer[i]=0;
806 2 }
807 1
808 1 for (i=0; i<10; i++)
809 1 {
810 2 disp_buffer[i] = num%10;
811 2 num = num/10;
812 2 if (num==0)
813 2 break;
814 2 }
815 1 }
816
817 /****************************************************************************/
818 /* 函数名:bcd_to_buff */
819 /* 功 能:将BCD码转换为ASCII序列,保存在全局变量显示缓冲区中,内部使用 */
820 /* 作 者:spot */
821 /* 输 入:bcd */
822 /* 输 出:无 */
823 /* */
824 /* 历史记录: */
825 /* spot 2005-08-28 Creat Inital version. (Version 1.0) */
826 /****************************************************************************/
827 void bcd_to_buff(u_char bcd)
828 {
829 1 u_int i=0;
830 1 for (i=0; i<14; i++)
831 1 {
832 2 disp_buffer[i]=0;
833 2 }
834 1
835 1 disp_buffer[0] = (bcd & 0x0f);
836 1 disp_buffer[1] = ( (bcd & 0xf0) >> 4 );
837 1 }
838
839 /* 以下函数为固定液晶显示内容函数 */
840 void show_title(void)
841 {
842 1 lcd_clr();
843 1 dprintf(0,0," 欢迎使用 ",0);
844 1 dprintf(0,1,"圣通科技报警器 ",0);
845 1 }
846
847 void show_setmenu_a(void)
848 {
849 1 lcd_clr();
850 1 dprintf(0,0,"a设置温度阈值 ",1);
851 1 dprintf(0,1,"a设置模入阈值 ",0);
852 1 }
853
854 void show_setmenu_b(void)
855 {
856 1 lcd_clr();
857 1 dprintf(0,0,"a设置温度阈值 ",0);
858 1 dprintf(0,1,"a设置模入阈值 ",1);
859 1 }
860
861 void show_setmenu_c(void)
C51 COMPILER V7.09 LCD 10/09/2005 20:45:34 PAGE 15
862 {
863 1 lcd_clr();
864 1 dprintf(0,0,"a设置模入阈值 ",0);
865 1 dprintf(0,1,"a设置光强阈值 ",1);
866 1
867 1 }
868
869 void show_setmenu_d(void)
870 {
871 1 lcd_clr();
872 1 dprintf(0,0,"a设置模入阈值 ",1);
873 1 dprintf(0,1,"a设置光强阈值 ",0);
874 1
875 1 }
876
877 /* 显示温度阈值上限设置 */
878 void show_temp_limit_high(u_char high_limit, u_char low_limit)
879 {
880 1 lcd_clr();
881 1 dprintf(0,0," 温度阈值 ",0);
882 1 dprintf(8,1,"上限",1);
883 1 num_to_buff(high_limit);
884 1 disp_ram_data(40,1,2,1);
885 1
886 1 dprintf(71,1,"下限",0);
887 1 num_to_buff(low_limit);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -