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

📄 lcd.lis

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module LCD.c
                        .area text
 0000                   .dbfile LCD.c
 0000                   .dbfunc e LCDInit _LCDInit fV
 0000           _LCDInit::
 0000                   .dbline -1
 0000                   .dbline 34
 0000           ; /*-------------------------------------------------------------------------*
 0000           ; *文件描述:本文件包含了液晶显示相关子程序,分别为:                           *  
 0000           ; *(1)Lcdinit:液晶初始化子程序                                               *
 0000           ; *(2)LcdShCh:在液晶显示屏上显示字符数据                                     *
 0000           ; *(3)LcdShGrRe:在Lcd的指定行上显示或取消矩型边框                            *
 0000           ; *(4)LcdShGrCil:在Lcd上显示或取消空心圆型                                   *
 0000           ; *-------------------------------------------------------------------------*/
 0000           ; 
 0000           ; //包含头文件 
 0000           ; #include "LCD.h"    //Lcd头文件
 0000           ; 
 0000           ; //定义延时子程序
 0000           ; #define delay1600us DelayTimes(4000)      //延时>1.6ms
 0000           ; #define delay72us   DelayTimes(30)          //延时>72us
 0000           ; #define delay40ms   DelayTimes(10000)     //延时>40ms
 0000           ; 
 0000           ; //内部调用函数声明
 0000           ; //在Lcd指定位置上设置线型16个点的显示
 0000           ; void LcdShGr16P(INT8U,INT8U,INT16S);
 0000           ; //在Lcd指定位置上画1个点
 0000           ; void LcdShGr1P(INT8U,INT8U);
 0000           ; void DelayTimes(INT16U);                  //延时指定时间
 0000           ; void Wtite_Command(INT8U);                //将控制命令写入Lcd
 0000           ; void Wtite_Data(INT8U);                   //将数据写入Lcd
 0000           ; void LcdShGrClr(void);                    //在Lcd上清图形显示屏
 0000           ; 
 0000           ; /*===========================[Lcd初始化操作]==============================*/
 0000           ; //Lcdinit:初始化液晶-------------------------------------------------------*
 0000           ; //功  能:初始化液晶,设置显示方式,清屏、C自动+1                            *
 0000           ; //参  数:无                                                                *
 0000           ; //返  回:无                                                                *
 0000           ; //-------------------------------------------------------------------------*
 0000           ; void LCDInit(void)
 0000           ; {
 0000                   .dbline 37
 0000           ;     /*控制口高四位设置为输出*/
 0000           ; //    LCD_CtrlPort|=1<<LCD_BL;//BL=1,关掉背光
 0000           ;     LCD_CtrlPortDDR|=(1<<LCD_RS);//RS的方向为输出
 0000 1206              bset #1,0x6
 0002                   .dbline 38
 0002           ;       LCD_CtrlPortDDR|=(1<<LCD_RW);//RW的方向为输出
 0002 1406              bset #2,0x6
 0004                   .dbline 39
 0004           ;       LCD_CtrlPortDDR|=(1<<LCD_E); // E的方向为输出
 0004 1606              bset #3,0x6
 0006                   .dbline 40
 0006           ;       LCD_CtrlPortDDR|=(1<<LCD_BL);//BL的方向为输出
 0006 1806              bset #4,0x6
 0008                   .dbline 42
 0008           ;       //数据口设置为输出
 0008           ;       LCD_DataPortDDR=0xff;      
 0008 A6FF              lda #-1
 000A B705              sta 0x5
 000C                   .dbline 44
 000C           ;       //[Lcd初始化]
 000C           ;       delay40ms;                 //延时>40ms
 000C 452710            ldhx #10000
 000F 89                pshx
 0010 8B                pshh
 0011 CD0451            jsr _DelayTimes
 0014 A702              ais #2
 0016                   .dbline 45
 0016           ;     Wtite_Command(0b00110000); //8位数据,基本指令
 0016 A630              lda #48
 0018 87                psha
 0019 CD041B            jsr _Wtite_Command
 001C A701              ais #1
 001E                   .dbline 46
 001E           ;       Wtite_Command(0b00001100); //开显示
 001E A60C              lda #12
 0020 87                psha
 0021 CD041B            jsr _Wtite_Command
 0024 A701              ais #1
 0026                   .dbline 47
 0026           ;       Wtite_Command(0b00000001); //清屏
 0026 A601              lda #1
 0028 87                psha
 0029 CD041B            jsr _Wtite_Command
 002C A701              ais #1
 002E                   .dbline 48
 002E           ;       delay1600us;               //延时>1.6ms
 002E 450FA0            ldhx #4000
 0031 89                pshx
 0032 8B                pshh
 0033 CD0451            jsr _DelayTimes
 0036 A702              ais #2
 0038                   .dbline 49
 0038           ;       Wtite_Command(0b00000110); //进入模式设定
 0038 A606              lda #6
 003A 87                psha
 003B CD041B            jsr _Wtite_Command
 003E A701              ais #1
 0040                   .dbline 50
 0040           ;     LcdShGrClr();              //清Lcd图形显示屏
 0040 CD0338            jsr _LcdShGrClr
 0043 95                tsx
 0044                   .dbline -2
 0044           L1:
 0044                   .dbline 0 ; func end
 0044 81                rts
 0045                   .dbend
 0045                   .dbfunc e LcdShCh _LcdShCh fV
 0045           ;              i -> 0,X
 0045           ;       LcdSBuff -> 3,X
 0045           _LcdShCh::
 0045                   .dbline -1
 0045 A7FF              ais #-1
 0047 95                tsx
 0048                   .dbline 61
 0048           ; //    LCD_CtrlPort&=~(1<<LCD_BL);//BL=0,打开背光
 0048           ; }
 0048           ; 
 0048           ; /*=======================[Lcd显示字符操作]================================*/
 0048           ; /*LcdShCh:在液晶显示屏上显示字符数据---------------------------------------*
 0048           ; *功  能:在液晶显示屏上显示以LcdSBuff为首地址的64个数据                     *
 0048           ; *参  数:待显示的64个数据的首地址                                           *
 0048           ; *返  回:无                                                                 *
 0048           ; *-------------------------------------------------------------------------*/
 0048           ; void LcdShCh(INT8U *LcdSBuff)
 0048           ; {
 0048                   .dbline 64
 0048           ;       unsigned char i;             //data数组计数器(0-63)
 0048           ;   //[Lcd显示64个数据]   
 0048           ;     Wtite_Command(0x80);         //DDRAM地址设置
 0048 A680              lda #-128
 004A 87                psha
 004B CD041B            jsr _Wtite_Command
 004E A701              ais #1
 0050 95                tsx
 0051                   .dbline 65
 0051           ;       for(i=0;i<64;i++)            //显示data中的64个数据
 0051 7F                clr ,X
 0052 2065              bra L6
 0054           L3:
 0054                   .dbline 66
 0054           ;        { 
 0054                   .dbline 68
 0054           ;         //[Lcd按行显示16个数据]
 0054           ;         if((i<=15)||(i>=48))         //第一行和第四行不变
 0054 F6                lda ,X
 0055 A10F              cmp #15
 0057 2304              bls L9
 0059 A130              cmp #48
 005B 2519              blo L7
 005D           L9:
 005D                   .dbline 69
 005D           ;               Wtite_Data(LcdSBuff[i]);   
 005D 3F00              clr *__r0
 005F F6                lda ,X
 0060 EB04              add 4,X
 0062 B700              sta *__r1
 0064 B600              lda *__r0
 0066 E903              adc 3,X
 0068 B700              sta *__r0
 006A 5500              ldhx *__r0
 006C F6                lda ,x
 006D 87                psha
 006E CD0436            jsr _Wtite_Data
 0071 A701              ais #1
 0073 95                tsx
 0074 2042              bra L8
 0076           L7:
 0076                   .dbline 70
 0076           ;         else if(i<=31)       //显示的第二行为缓冲的第三行
 0076 F6                lda ,X
 0077 A11F              cmp #31
 0079 221A              bhi L10
 007B                   .dbline 71
 007B           ;           Wtite_Data(LcdSBuff[i+16]);
 007B 3F00              clr *__r0
 007D EB04              add 4,X
 007F B700              sta *__r1
 0081 B600              lda *__r0
 0083 E903              adc 3,X
 0085 B700              sta *__r0
 0087 5500              ldhx *__r0
 0089 AF10              aix #16
 008B F6                lda ,x
 008C 87                psha
 008D CD0436            jsr _Wtite_Data
 0090 A701              ais #1
 0092 95                tsx
 0093 2023              bra L11
 0095           L10:
 0095                   .dbline 73
 0095           ;         else                 //显示的第三行为缓冲的第二行
 0095           ;           Wtite_Data(LcdSBuff[i-16]);
 0095 3F00              clr *__r0
 0097 F6                lda ,X
 0098 A010              sub #16
 009A B700              sta *__r1
 009C B600              lda *__r0
 009E A200              sbc #0
 00A0 B700              sta *__r0
 00A2 B600              lda *__r1
 00A4 EB04              add 4,X
 00A6 B700              sta *__r1
 00A8 B600              lda *__r0
 00AA E903              adc 3,X
 00AC B700              sta *__r0
 00AE 5500              ldhx *__r0
 00B0 F6                lda ,x
 00B1 87                psha
 00B2 CD0436            jsr _Wtite_Data
 00B5 A701              ais #1
 00B7 95                tsx
 00B8           L11:
 00B8           L8:
 00B8                   .dbline 74
 00B8           L4:
 00B8                   .dbline 65
 00B8 7C                inc ,X
 00B9           L6:
 00B9                   .dbline 65
 00B9 F6                lda ,X
 00BA A140              cmp #64
 00BC 2596              blo L3
 00BE                   .dbline -2
 00BE           L2:
 00BE A701              ais #1
 00C0                   .dbline 0 ; func end
 00C0 81                rts
 00C1                   .dbsym l i 0 c
 00C1                   .dbsym l LcdSBuff 3 pc
 00C1                   .dbend
 00C1                   .dbfunc e LcdShGrCil _LcdShGrCil fV
 00C1           ;              y -> 0,X
 00C1           ;        mistake -> 1,X
 00C1           ;              x -> 5,X
 00C1           ;            GrE -> 12,X
 00C1           ;        GrCilMV -> 11,X
 00C1           ;             CR -> 10,X
 00C1           ;             Cx -> 9,X
 00C1           ;             Cy -> 8,X
 00C1           _LcdShGrCil::
 00C1                   .dbline -1
 00C1 A7FA              ais #-6
 00C3 95                tsx
 00C4                   .dbline 87
 00C4           ;        }        
 00C4           ; }
 00C4           ; 
 00C4           ; /*===[Lcd画图操作:包括画圆,画矩形框,图形清屏,画点等]===================*/
 00C4           ; /*LcdShGrCil:在Lcd上显示或取消空心圆型-------------------------------------*
 00C4           ; *功  能:在Lcd上的指定位置显示或取消空心圆型                                *
 00C4           ; *参  数:Cx为圆心横坐标,Cy为圆心纵坐标                                      *
 00C4           ; *       CR为圆的半径,GrE确定图形是否有效                                   *
 00C4           ; *       GrCilMV为显示圆型时的正误差值                                      *
 00C4           ; *       例如:半径为10,误差为4;半径为30,误差为30                         *
 00C4           ; *返  回:无                                                                 *
 00C4           ; *-------------------------------------------------------------------------*/
 00C4           ; void LcdShGrCil(INT8U Cy,INT8U Cx,INT8U CR,INT8U GrCilMV,INT8U GrE)
 00C4           ; {
 00C4                   .dbline 90
 00C4           ;   INT8U x,y;                    //坐标的循环控制变量
 00C4           ;   INT32S mistake;               //显示时的误差值
 00C4           ;   Wtite_Command(0b00110110);    //扩展指令,绘图开
 00C4 A636              lda #54
 00C6 87                psha
 00C7 CD041B            jsr _Wtite_Command
 00CA A701              ais #1
 00CC 95                tsx
 00CD                   .dbline 91
 00CD           ;   for(y=Cy-CR;y<=Cy+CR;y++)
 00CD E608              lda 8,X
 00CF E00A              sub 10,X
 00D1 F7                sta ,X
 00D2 CC0252            jmp L16
 00D5           L13:
 00D5                   .dbline 92
 00D5           ;       for(x=Cx-CR;x<=Cx+CR;x++)
 00D5 E609              lda 9,X
 00D7 E00A              sub 10,X
 00D9 E705              sta 5,X
 00DB CC0242            jmp L20
 00DE           L17:
 00DE                   .dbline 93
 00DE           ;            {  
 00DE                   .dbline 94
 00DE           ;             mistake=(x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)-CR*CR;
 00DE 3F00              clr *__r0
 00E0 E609              lda 9,X
 00E2 B700              sta *__r1
 00E4 3F00              clr *__r2
 00E6 E605              lda 5,X
 00E8 B000              sub *__r1
 00EA B700              sta *__r1
 00EC B600              lda *__r2
 00EE B200              sbc *__r0
 00F0 B700              sta *__r0
 00F2 3F00              clr *__r2
 00F4 E608              lda 8,X
 00F6 B700              sta *__r3
 00F8 3F00              clr *__r4
 00FA F6                lda ,X
 00FB B000              sub *__r3
 00FD B700              sta *__r3
 00FF B600              lda *__r4
 0101 B200              sbc *__r2
 0103 B700              sta *__r2
 0105 B600              lda *__r3
 0107 87                psha
 0108 B600              lda *__r2
 010A 87                psha
 010B B600              lda *__r3
 010D 87                psha
 010E B600              lda *__r2
 0110 87                psha
 0111 CD0000            jsr __mul16
 0114 A704              ais #4
 0116 4E0000            mov *__rlo,*__r3
 0119 4E0000            mov *__rhi,*__r2
 011C B600              lda *__r1
 011E 87                psha
 011F B600              lda *__r0
 0121 87                psha
 0122 B600              lda *__r1
 0124 87                psha
 0125 B600              lda *__r0
 0127 87                psha
 0128 CD0000            jsr __mul16
 012B A704              ais #4
 012D 4E0000            mov *__rlo,*__r1
 0130 4E0000            mov *__rhi,*__r0
 0133 B600              lda *__r1
 0135 BB00              add *__r3
 0137 B700              sta *__r1
 0139 B600              lda *__r0
 013B B900              adc *__r2
 013D B700              sta *__r0
 013F 3F00              clr *__r2
 0141 E60A              lda 10,X
 0143 B700              sta *__r3
 0145 3F00              clr *__r4
 0147 E60A              lda 10,X
 0149 87                psha
 014A B600              lda *__r4
 014C 87                psha
 014D B600              lda *__r3
 014F 87                psha
 0150 B600              lda *__r2
 0152 87                psha
 0153 CD0000            jsr __mul16
 0156 A704              ais #4
 0158 4E0000            mov *__rlo,*__r3
 015B 4E0000            mov *__rhi,*__r2
 015E B600              lda *__r1
 0160 B000              sub *__r3
 0162 B700              sta *__r1
 0164 B600              lda *__r0
 0166 B200              sbc *__r2
 0168 B700              sta *__r0
 016A 4F                clra
 016B E702              sta 2,X
 016D E701              sta 1,X
 016F B600              lda *__r1
 0171 E704              sta 4,X
 0173 B600              lda *__r0
 0175 E703              sta 3,X
 0177 2A04              bpl X0
 0179 6302              com 2,X
 017B 6301              com 1,X
 017D           X0:
 017D                   .dbline 96
 017D           ;             //误差在范围之内时,显示该点
 017D           ;             if((mistake<=GrCilMV)&&(mistake>=-GrCilMV))
 017D 3F00              clr *__r2
 017F 3F00              clr *__r1
 0181 3F00              clr *__r0
 0183 E60B              lda 11,X
 0185 B700              sta *__r3
 0187 E604              lda 4,X
 0189 87                psha
 018A E603              lda 3,X
 018C 87                psha

⌨️ 快捷键说明

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