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

📄 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 36
 0000           ;     /*控制口高四位设置为输出*/
 0000           ;     LCD_CtrlPortDDR|=(1<<LCD_RS);//RS的方向为输出
 0000 1206              bset #1,0x6
 0002                   .dbline 37
 0002           ;       LCD_CtrlPortDDR|=(1<<LCD_RW);//RW的方向为输出
 0002 1406              bset #2,0x6
 0004                   .dbline 38
 0004           ;       LCD_CtrlPortDDR|=(1<<LCD_E); // E的方向为输出
 0004 1606              bset #3,0x6
 0006                   .dbline 39
 0006           ;       LCD_CtrlPortDDR|=(1<<LCD_BL);//BL的方向为输出
 0006 1806              bset #4,0x6
 0008                   .dbline 41
 0008           ;       //数据口设置为输出
 0008           ;       LCD_DataPortDDR=0xff;      
 0008 A6FF              lda #-1
 000A B705              sta 0x5
 000C                   .dbline 43
 000C           ;       //[Lcd初始化]
 000C           ;       delay40ms;                 //延时>40ms
 000C 452710            ldhx #10000
 000F 89                pshx
 0010 8B                pshh
 0011 CD0453            jsr _DelayTimes
 0014 A702              ais #2
 0016                   .dbline 44
 0016           ;     Wtite_Command(0b00110000); //8位数据,基本指令
 0016 A630              lda #48
 0018 87                psha
 0019 CD041D            jsr _Wtite_Command
 001C A701              ais #1
 001E                   .dbline 45
 001E           ;       Wtite_Command(0b00001100); //开显示
 001E A60C              lda #12
 0020 87                psha
 0021 CD041D            jsr _Wtite_Command
 0024 A701              ais #1
 0026                   .dbline 46
 0026           ;       Wtite_Command(0b00000001); //清屏
 0026 A601              lda #1
 0028 87                psha
 0029 CD041D            jsr _Wtite_Command
 002C A701              ais #1
 002E                   .dbline 47
 002E           ;       delay1600us;               //延时>1.6ms
 002E 450FA0            ldhx #4000
 0031 89                pshx
 0032 8B                pshh
 0033 CD0453            jsr _DelayTimes
 0036 A702              ais #2
 0038                   .dbline 48
 0038           ;       Wtite_Command(0b00000110); //进入模式设定
 0038 A606              lda #6
 003A 87                psha
 003B CD041D            jsr _Wtite_Command
 003E A701              ais #1
 0040                   .dbline 49
 0040           ;     LcdShGrClr();              //清Lcd图形显示屏
 0040 CD033A            jsr _LcdShGrClr
 0043 95                tsx
 0044                   .dbline 50
 0044           ;     LCD_CtrlPort&=~(1<<LCD_BL);//BL=0,打开背光
 0044 1902              bclr #4,0x2
 0046                   .dbline -2
 0046           L1:
 0046                   .dbline 0 ; func end
 0046 81                rts
 0047                   .dbend
 0047                   .dbfunc e LcdShCh _LcdShCh fV
 0047           ;              i -> 0,X
 0047           ;       LcdSBuff -> 3,X
 0047           _LcdShCh::
 0047                   .dbline -1
 0047 A7FF              ais #-1
 0049 95                tsx
 004A                   .dbline 60
 004A           ; }
 004A           ; 
 004A           ; /*=======================[Lcd显示字符操作]================================*/
 004A           ; /*LcdShCh:在液晶显示屏上显示字符数据---------------------------------------*
 004A           ; *功  能:在液晶显示屏上显示以LcdSBuff为首地址的64个数据                     *
 004A           ; *参  数:待显示的64个数据的首地址                                           *
 004A           ; *返  回:无                                                                 *
 004A           ; *-------------------------------------------------------------------------*/
 004A           ; void LcdShCh(INT8U *LcdSBuff)
 004A           ; {
 004A                   .dbline 63
 004A           ;       unsigned char i;             //data数组计数器(0-63)
 004A           ;   //[Lcd显示64个数据]   
 004A           ;     Wtite_Command(0x80);         //DDRAM地址设置
 004A A680              lda #-128
 004C 87                psha
 004D CD041D            jsr _Wtite_Command
 0050 A701              ais #1
 0052 95                tsx
 0053                   .dbline 64
 0053           ;       for(i=0;i<64;i++)            //显示data中的64个数据
 0053 7F                clr ,X
 0054 2065              bra L6
 0056           L3:
 0056                   .dbline 65
 0056           ;        { 
 0056                   .dbline 67
 0056           ;         //[Lcd按行显示16个数据]
 0056           ;         if((i<=15)||(i>=48))         //第一行和第四行不变
 0056 F6                lda ,X
 0057 A10F              cmp #15
 0059 2304              bls L9
 005B A130              cmp #48
 005D 2519              blo L7
 005F           L9:
 005F                   .dbline 68
 005F           ;               Wtite_Data(LcdSBuff[i]);   
 005F 3F00              clr *__r0
 0061 F6                lda ,X
 0062 EB04              add 4,X
 0064 B700              sta *__r1
 0066 B600              lda *__r0
 0068 E903              adc 3,X
 006A B700              sta *__r0
 006C 5500              ldhx *__r0
 006E F6                lda ,x
 006F 87                psha
 0070 CD0438            jsr _Wtite_Data
 0073 A701              ais #1
 0075 95                tsx
 0076 2042              bra L8
 0078           L7:
 0078                   .dbline 69
 0078           ;         else if(i<=31)       //显示的第二行为缓冲的第三行
 0078 F6                lda ,X
 0079 A11F              cmp #31
 007B 221A              bhi L10
 007D                   .dbline 70
 007D           ;           Wtite_Data(LcdSBuff[i+16]);
 007D 3F00              clr *__r0
 007F EB04              add 4,X
 0081 B700              sta *__r1
 0083 B600              lda *__r0
 0085 E903              adc 3,X
 0087 B700              sta *__r0
 0089 5500              ldhx *__r0
 008B AF10              aix #16
 008D F6                lda ,x
 008E 87                psha
 008F CD0438            jsr _Wtite_Data
 0092 A701              ais #1
 0094 95                tsx
 0095 2023              bra L11
 0097           L10:
 0097                   .dbline 72
 0097           ;         else                 //显示的第三行为缓冲的第二行
 0097           ;           Wtite_Data(LcdSBuff[i-16]);
 0097 3F00              clr *__r0
 0099 F6                lda ,X
 009A A010              sub #16
 009C B700              sta *__r1
 009E B600              lda *__r0
 00A0 A200              sbc #0
 00A2 B700              sta *__r0
 00A4 B600              lda *__r1
 00A6 EB04              add 4,X
 00A8 B700              sta *__r1
 00AA B600              lda *__r0
 00AC E903              adc 3,X
 00AE B700              sta *__r0
 00B0 5500              ldhx *__r0
 00B2 F6                lda ,x
 00B3 87                psha
 00B4 CD0438            jsr _Wtite_Data
 00B7 A701              ais #1
 00B9 95                tsx
 00BA           L11:
 00BA           L8:
 00BA                   .dbline 73
 00BA           L4:
 00BA                   .dbline 64
 00BA 7C                inc ,X
 00BB           L6:
 00BB                   .dbline 64
 00BB F6                lda ,X
 00BC A140              cmp #64
 00BE 2596              blo L3
 00C0                   .dbline -2
 00C0           L2:
 00C0 A701              ais #1
 00C2                   .dbline 0 ; func end
 00C2 81                rts
 00C3                   .dbsym l i 0 c
 00C3                   .dbsym l LcdSBuff 3 pc
 00C3                   .dbend
 00C3                   .dbfunc e LcdShGrCil _LcdShGrCil fV
 00C3           ;              y -> 0,X
 00C3           ;        mistake -> 1,X
 00C3           ;              x -> 5,X
 00C3           ;            GrE -> 12,X
 00C3           ;        GrCilMV -> 11,X
 00C3           ;             CR -> 10,X
 00C3           ;             Cx -> 9,X
 00C3           ;             Cy -> 8,X
 00C3           _LcdShGrCil::
 00C3                   .dbline -1
 00C3 A7FA              ais #-6
 00C5 95                tsx
 00C6                   .dbline 86
 00C6           ;        }        
 00C6           ; }
 00C6           ; 
 00C6           ; /*===[Lcd画图操作:包括画圆,画矩形框,图形清屏,画点等]===================*/
 00C6           ; /*LcdShGrCil:在Lcd上显示或取消空心圆型-------------------------------------*
 00C6           ; *功  能:在Lcd上的指定位置显示或取消空心圆型                                *
 00C6           ; *参  数:Cx为圆心横坐标,Cy为圆心纵坐标                                      *
 00C6           ; *       CR为圆的半径,GrE确定图形是否有效                                   *
 00C6           ; *       GrCilMV为显示圆型时的正误差值                                      *
 00C6           ; *       例如:半径为10,误差为4;半径为30,误差为30                         *
 00C6           ; *返  回:无                                                                 *
 00C6           ; *-------------------------------------------------------------------------*/
 00C6           ; void LcdShGrCil(INT8U Cy,INT8U Cx,INT8U CR,INT8U GrCilMV,INT8U GrE)
 00C6           ; {
 00C6                   .dbline 89
 00C6           ;   INT8U x,y;                    //坐标的循环控制变量
 00C6           ;   INT32S mistake;               //显示时的误差值
 00C6           ;   Wtite_Command(0b00110110);    //扩展指令,绘图开
 00C6 A636              lda #54
 00C8 87                psha
 00C9 CD041D            jsr _Wtite_Command
 00CC A701              ais #1
 00CE 95                tsx
 00CF                   .dbline 90
 00CF           ;   for(y=Cy-CR;y<=Cy+CR;y++)
 00CF E608              lda 8,X
 00D1 E00A              sub 10,X
 00D3 F7                sta ,X
 00D4 CC0254            jmp L16
 00D7           L13:
 00D7                   .dbline 91
 00D7           ;       for(x=Cx-CR;x<=Cx+CR;x++)
 00D7 E609              lda 9,X
 00D9 E00A              sub 10,X
 00DB E705              sta 5,X
 00DD CC0244            jmp L20
 00E0           L17:
 00E0                   .dbline 92
 00E0           ;            {  
 00E0                   .dbline 93
 00E0           ;             mistake=(x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)-CR*CR;
 00E0 3F00              clr *__r0
 00E2 E609              lda 9,X
 00E4 B700              sta *__r1
 00E6 3F00              clr *__r2
 00E8 E605              lda 5,X
 00EA B000              sub *__r1
 00EC B700              sta *__r1
 00EE B600              lda *__r2
 00F0 B200              sbc *__r0
 00F2 B700              sta *__r0
 00F4 3F00              clr *__r2
 00F6 E608              lda 8,X
 00F8 B700              sta *__r3
 00FA 3F00              clr *__r4
 00FC F6                lda ,X
 00FD B000              sub *__r3
 00FF B700              sta *__r3
 0101 B600              lda *__r4
 0103 B200              sbc *__r2
 0105 B700              sta *__r2
 0107 B600              lda *__r3
 0109 87                psha
 010A B600              lda *__r2
 010C 87                psha
 010D B600              lda *__r3
 010F 87                psha
 0110 B600              lda *__r2
 0112 87                psha
 0113 CD0000            jsr __mul16
 0116 A704              ais #4
 0118 4E0000            mov *__rlo,*__r3
 011B 4E0000            mov *__rhi,*__r2
 011E B600              lda *__r1
 0120 87                psha
 0121 B600              lda *__r0
 0123 87                psha
 0124 B600              lda *__r1
 0126 87                psha
 0127 B600              lda *__r0
 0129 87                psha
 012A CD0000            jsr __mul16
 012D A704              ais #4
 012F 4E0000            mov *__rlo,*__r1
 0132 4E0000            mov *__rhi,*__r0
 0135 B600              lda *__r1
 0137 BB00              add *__r3
 0139 B700              sta *__r1
 013B B600              lda *__r0
 013D B900              adc *__r2
 013F B700              sta *__r0
 0141 3F00              clr *__r2
 0143 E60A              lda 10,X
 0145 B700              sta *__r3
 0147 3F00              clr *__r4
 0149 E60A              lda 10,X
 014B 87                psha
 014C B600              lda *__r4
 014E 87                psha
 014F B600              lda *__r3
 0151 87                psha
 0152 B600              lda *__r2
 0154 87                psha
 0155 CD0000            jsr __mul16
 0158 A704              ais #4
 015A 4E0000            mov *__rlo,*__r3
 015D 4E0000            mov *__rhi,*__r2
 0160 B600              lda *__r1
 0162 B000              sub *__r3
 0164 B700              sta *__r1
 0166 B600              lda *__r0
 0168 B200              sbc *__r2
 016A B700              sta *__r0
 016C 4F                clra
 016D E702              sta 2,X
 016F E701              sta 1,X
 0171 B600              lda *__r1
 0173 E704              sta 4,X
 0175 B600              lda *__r0
 0177 E703              sta 3,X
 0179 2A04              bpl X0
 017B 6302              com 2,X
 017D 6301              com 1,X
 017F           X0:
 017F                   .dbline 95
 017F           ;             //误差在范围之内时,显示该点

⌨️ 快捷键说明

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