⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.lis

📁 为苏州一家公司所做的的恒温恒湿车间控制 系统
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module lcd.c
                        .area text
 0000                   .dbfile lcd.c
 0000                   .dbfunc e Lcdinit _Lcdinit fV
 0000           _Lcdinit::
 0000                   .dbline -1
 0000                   .dbline 31
 0000           ; /*-----------------------------------------------------*
 0000           ; *文件描述:本文件包含了液晶显示相关子程序,分别为:       *  
 0000           ; *(1)Lcdinit:液晶初始化子程序                           *
 0000           ; *(2)LcdShCh:在液晶显示屏上显示字符数据                 *
 0000           ; *(3)LcdShGrRe:在Lcd的指定行上显示或取消矩型边框        *
 0000           ; *(4)LcdShGrCil:在Lcd上显示或取消空心圆型               *
 0000           ; *-----------------------------------------------------*/
 0000           ; //包含头文件 
 0000           ; #include "Includes.h"
 0000           ; //定义延时子程序
 0000           ; #define delay1600us DelayTimes(4000)     //延时>1.6ms
 0000           ; #define delay72us   DelayTimes(30)          //延时>72us
 0000           ; #define delay40ms   DelayTimes(10000)     //延时>40ms
 0000           ; //内部调用函数声明
 0000           ; void DelayTimes(unsigned int);         //延时指定时间
 0000           ; void Wtite_Command(unsigned char);//将控制命令写入Lcd
 0000           ; void Wtite_Data(unsigned char);       //将数据写入Lcd
 0000           ; void LcdShGrClr(void);          //在Lcd上清图形显示屏
 0000           ; //在Lcd指定位置上设置线型16个点的显示
 0000           ; void LcdShGr16P(unsigned char,unsigned char,int);
 0000           ; //在Lcd指定位置上画1个点
 0000           ; void LcdShGr1P(unsigned char,unsigned char);
 0000           ; 
 0000           ; //==================[Lcd初始化操作]==========================
 0000           ; /*Lcdinit:初始化液晶-----------------------------------*
 0000           ; *功  能:初始化液晶,设置显示方式,清屏、C自动+1         *
 0000           ; *参  数:无                                             *
 0000           ; *返  回:无                                             *
 0000           ; *-----------------------------------------------------*/
 0000           ; void Lcdinit(void)
 0000           ; {
 0000                   .dbline 32
 0000           ;     LCD_CtrlPortDDR |=0xF0;    //控制口高四位设置为输出
 0000 B607              lda 0x7
 0002 AAF0              ora #-16
 0004 B707              sta 0x7
 0006                   .dbline 33
 0006           ;       LCD_DataPortDDR=0xff;      //数据口设置为输出
 0006 A6FF              lda #-1
 0008 B705              sta 0x5
 000A                   .dbline 35
 000A           ;       //[Lcd初始化]
 000A           ;       delay40ms;                 //延时>40ms
 000A 452710            ldhx #10000
 000D 89                pshx
 000E 8B                pshh
 000F CD044F            jsr _DelayTimes
 0012 A702              ais #2
 0014                   .dbline 36
 0014           ;     Wtite_Command(0b00110000); //8位数据,基本指令
 0014 A630              lda #48
 0016 87                psha
 0017 CD0419            jsr _Wtite_Command
 001A A701              ais #1
 001C                   .dbline 37
 001C           ;       Wtite_Command(0b00001100); //开显示
 001C A60C              lda #12
 001E 87                psha
 001F CD0419            jsr _Wtite_Command
 0022 A701              ais #1
 0024                   .dbline 38
 0024           ;       Wtite_Command(0b00000001); //清屏
 0024 A601              lda #1
 0026 87                psha
 0027 CD0419            jsr _Wtite_Command
 002A A701              ais #1
 002C                   .dbline 39
 002C           ;       delay1600us;               //延时>1.6ms
 002C 450FA0            ldhx #4000
 002F 89                pshx
 0030 8B                pshh
 0031 CD044F            jsr _DelayTimes
 0034 A702              ais #2
 0036                   .dbline 40
 0036           ;       Wtite_Command(0b00000110); //进入模式设定
 0036 A606              lda #6
 0038 87                psha
 0039 CD0419            jsr _Wtite_Command
 003C A701              ais #1
 003E                   .dbline 41
 003E           ;     LcdShGrClr();              //清Lcd图形显示屏
 003E CD0336            jsr _LcdShGrClr
 0041 95                tsx
 0042                   .dbline -2
 0042           L1:
 0042                   .dbline 0 ; func end
 0042 81                rts
 0043                   .dbend
 0043                   .dbfunc e LcdShCh _LcdShCh fV
 0043           ;              i -> 0,X
 0043           ;       LcdSBuff -> 3,X
 0043           _LcdShCh::
 0043                   .dbline -1
 0043 A7FF              ais #-1
 0045 95                tsx
 0046                   .dbline 52
 0046           ;     //LCD_CtrlPort&=~(1<<LCD_BL);//BL=0,打开背光
 0046           ; }
 0046           ; 
 0046           ; //==================[Lcd显示字符操作]========================
 0046           ; /*LcdShCh:在液晶显示屏上显示字符数据-------------------*
 0046           ; *功  能:在液晶显示屏上显示以LcdSBuff为首地址的64个数据 *
 0046           ; *参  数:待显示的64个数据的首地址                       *
 0046           ; *返  回:无                                             *
 0046           ; *-----------------------------------------------------*/
 0046           ; void LcdShCh(unsigned char *LcdSBuff)
 0046           ; {
 0046                   .dbline 55
 0046           ;       unsigned char i;             //data数组计数器(0-63)
 0046           ;   //[Lcd显示64个数据]   
 0046           ;     Wtite_Command(0x80);         //DDRAM地址设置
 0046 A680              lda #-128
 0048 87                psha
 0049 CD0419            jsr _Wtite_Command
 004C A701              ais #1
 004E 95                tsx
 004F                   .dbline 56
 004F           ;       for(i=0;i<64;i++)            //显示data中的64个数据
 004F 7F                clr ,X
 0050 2065              bra L6
 0052           L3:
 0052                   .dbline 57
 0052           ;        { 
 0052                   .dbline 59
 0052           ;         //[Lcd按行显示16个数据]
 0052           ;         if((i<=15)||(i>=48))         //第一行和第四行不变
 0052 F6                lda ,X
 0053 A10F              cmp #15
 0055 2304              bls L9
 0057 A130              cmp #48
 0059 2519              blo L7
 005B           L9:
 005B                   .dbline 60
 005B           ;               Wtite_Data(LcdSBuff[i]);   
 005B 3F00              clr *__r0
 005D F6                lda ,X
 005E EB04              add 4,X
 0060 B700              sta *__r1
 0062 B600              lda *__r0
 0064 E903              adc 3,X
 0066 B700              sta *__r0
 0068 5500              ldhx *__r0
 006A F6                lda ,x
 006B 87                psha
 006C CD0434            jsr _Wtite_Data
 006F A701              ais #1
 0071 95                tsx
 0072 2042              bra L8
 0074           L7:
 0074                   .dbline 61
 0074           ;         else if(i<=31)       //显示的第二行为缓冲的第三行
 0074 F6                lda ,X
 0075 A11F              cmp #31
 0077 221A              bhi L10
 0079                   .dbline 62
 0079           ;           Wtite_Data(LcdSBuff[i+16]);
 0079 3F00              clr *__r0
 007B EB04              add 4,X
 007D B700              sta *__r1
 007F B600              lda *__r0
 0081 E903              adc 3,X
 0083 B700              sta *__r0
 0085 5500              ldhx *__r0
 0087 AF10              aix #16
 0089 F6                lda ,x
 008A 87                psha
 008B CD0434            jsr _Wtite_Data
 008E A701              ais #1
 0090 95                tsx
 0091 2023              bra L11
 0093           L10:
 0093                   .dbline 64
 0093           ;         else                 //显示的第三行为缓冲的第二行
 0093           ;           Wtite_Data(LcdSBuff[i-16]);
 0093 3F00              clr *__r0
 0095 F6                lda ,X
 0096 A010              sub #16
 0098 B700              sta *__r1
 009A B600              lda *__r0
 009C A200              sbc #0
 009E B700              sta *__r0
 00A0 B600              lda *__r1
 00A2 EB04              add 4,X
 00A4 B700              sta *__r1
 00A6 B600              lda *__r0
 00A8 E903              adc 3,X
 00AA B700              sta *__r0
 00AC 5500              ldhx *__r0
 00AE F6                lda ,x
 00AF 87                psha
 00B0 CD0434            jsr _Wtite_Data
 00B3 A701              ais #1
 00B5 95                tsx
 00B6           L11:
 00B6           L8:
 00B6                   .dbline 65
 00B6           L4:
 00B6                   .dbline 56
 00B6 7C                inc ,X
 00B7           L6:
 00B7                   .dbline 56
 00B7 F6                lda ,X
 00B8 A140              cmp #64
 00BA 2596              blo L3
 00BC                   .dbline -2
 00BC           L2:
 00BC A701              ais #1
 00BE                   .dbline 0 ; func end
 00BE 81                rts
 00BF                   .dbsym l i 0 c
 00BF                   .dbsym l LcdSBuff 3 pc
 00BF                   .dbend
 00BF                   .dbfunc e LcdShGrCil _LcdShGrCil fV
 00BF           ;              y -> 0,X
 00BF           ;        mistake -> 1,X
 00BF           ;              x -> 5,X
 00BF           ;            GrE -> 12,X
 00BF           ;        GrCilMV -> 11,X
 00BF           ;             CR -> 10,X
 00BF           ;             Cx -> 9,X
 00BF           ;             Cy -> 8,X
 00BF           _LcdShGrCil::
 00BF                   .dbline -1
 00BF A7FA              ais #-6
 00C1 95                tsx
 00C2                   .dbline 80
 00C2           ;        }        
 00C2           ; }
 00C2           ; 
 00C2           ; //=====[Lcd画图操作:包括画圆,画矩形框,图形清屏,画点等]=====
 00C2           ; /*LcdShGrCil:在Lcd上显示或取消空心圆型-----------------*
 00C2           ; *功  能:在Lcd上的指定位置显示或取消空心圆型            *
 00C2           ; *参  数:Cx为圆心横坐标,Cy为圆心纵坐标                  *
 00C2           ; *       CR为圆的半径,GrE确定图形是否有效               *
 00C2           ; *       GrCilMV为显示圆型时的正误差值                  *
 00C2           ; *       例如:半径为10,误差为4;半径为30,误差为30     *
 00C2           ; *返  回:无                                             *
 00C2           ; *-----------------------------------------------------*/
 00C2           ; void LcdShGrCil(unsigned char Cy,unsigned char Cx,
 00C2           ;                 unsigned char CR,unsigned char 
 00C2           ;                 GrCilMV,unsigned char GrE)
 00C2           ; {
 00C2                   .dbline 83
 00C2           ;   unsigned char x,y;            //坐标的循环控制变量
 00C2           ;   long int mistake;             //显示时的误差值
 00C2           ;   Wtite_Command(0b00110110);    //扩展指令,绘图开
 00C2 A636              lda #54
 00C4 87                psha
 00C5 CD0419            jsr _Wtite_Command
 00C8 A701              ais #1
 00CA 95                tsx
 00CB                   .dbline 84
 00CB           ;   for(y=Cy-CR;y<=Cy+CR;y++)
 00CB E608              lda 8,X
 00CD E00A              sub 10,X
 00CF F7                sta ,X
 00D0 CC0250            jmp L16
 00D3           L13:
 00D3                   .dbline 85
 00D3           ;       for(x=Cx-CR;x<=Cx+CR;x++)
 00D3 E609              lda 9,X
 00D5 E00A              sub 10,X
 00D7 E705              sta 5,X
 00D9 CC0240            jmp L20
 00DC           L17:
 00DC                   .dbline 86
 00DC           ;            {  
 00DC                   .dbline 87
 00DC           ;             mistake=(x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)-CR*CR;
 00DC 3F00              clr *__r0
 00DE E609              lda 9,X
 00E0 B700              sta *__r1
 00E2 3F00              clr *__r2
 00E4 E605              lda 5,X
 00E6 B000              sub *__r1
 00E8 B700              sta *__r1
 00EA B600              lda *__r2
 00EC B200              sbc *__r0
 00EE B700              sta *__r0
 00F0 3F00              clr *__r2
 00F2 E608              lda 8,X
 00F4 B700              sta *__r3
 00F6 3F00              clr *__r4
 00F8 F6                lda ,X
 00F9 B000              sub *__r3
 00FB B700              sta *__r3
 00FD B600              lda *__r4
 00FF B200              sbc *__r2
 0101 B700              sta *__r2
 0103 B600              lda *__r3
 0105 87                psha
 0106 B600              lda *__r2
 0108 87                psha
 0109 B600              lda *__r3
 010B 87                psha
 010C B600              lda *__r2
 010E 87                psha
 010F CD0000            jsr __mul16
 0112 A704              ais #4
 0114 4E0000            mov *__rlo,*__r3
 0117 4E0000            mov *__rhi,*__r2
 011A B600              lda *__r1
 011C 87                psha
 011D B600              lda *__r0
 011F 87                psha
 0120 B600              lda *__r1
 0122 87                psha
 0123 B600              lda *__r0
 0125 87                psha
 0126 CD0000            jsr __mul16
 0129 A704              ais #4
 012B 4E0000            mov *__rlo,*__r1
 012E 4E0000            mov *__rhi,*__r0
 0131 B600              lda *__r1
 0133 BB00              add *__r3
 0135 B700              sta *__r1
 0137 B600              lda *__r0
 0139 B900              adc *__r2
 013B B700              sta *__r0
 013D 3F00              clr *__r2
 013F E60A              lda 10,X
 0141 B700              sta *__r3
 0143 3F00              clr *__r4
 0145 E60A              lda 10,X
 0147 87                psha
 0148 B600              lda *__r4
 014A 87                psha
 014B B600              lda *__r3
 014D 87                psha
 014E B600              lda *__r2
 0150 87                psha
 0151 CD0000            jsr __mul16
 0154 A704              ais #4
 0156 4E0000            mov *__rlo,*__r3
 0159 4E0000            mov *__rhi,*__r2
 015C B600              lda *__r1
 015E B000              sub *__r3
 0160 B700              sta *__r1
 0162 B600              lda *__r0
 0164 B200              sbc *__r2
 0166 B700              sta *__r0
 0168 4F                clra
 0169 E702              sta 2,X
 016B E701              sta 1,X
 016D B600              lda *__r1
 016F E704              sta 4,X
 0171 B600              lda *__r0
 0173 E703              sta 3,X
 0175 2A04              bpl X0
 0177 6302              com 2,X
 0179 6301              com 1,X
 017B           X0:
 017B                   .dbline 89
 017B           ;             //误差在范围之内时,显示该点
 017B           ;             if((mistake<=GrCilMV)&&(mistake>=-GrCilMV))
 017B 3F00              clr *__r2
 017D 3F00              clr *__r1
 017F 3F00              clr *__r0
 0181 E60B              lda 11,X
 0183 B700              sta *__r3
 0185 E604              lda 4,X
 0187 87                psha
 0188 E603              lda 3,X
 018A 87                psha
 018B E602              lda 2,X
 018D 87                psha
 018E E601              lda 1,X
 0190 87                psha
 0191 B600              lda *__r3
 0193 87                psha
 0194 B600              lda *__r2
 0196 87                psha
 0197 B600              lda *__r1
 0199 87                psha
 019A B600              lda *__r0
 019C 87                psha
 019D CD0000            jsr __cmp32
 01A0 A708              ais #8
 01A2 9303              ble X2
 01A4 CC023E            jmp L21
 01A7           X2:
 01A7 3F00              clr *__r0
 01A9 E60B              lda 11,X

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -