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

📄 lcd.lis

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 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 33
 0000           ; /*-----------------------------------------------------*
 0000           ; *文件描述:本文件包含了液晶显示相关子程序,分别为:       *  
 0000           ; *(1)Lcdinit:液晶初始化子程序                           *
 0000           ; *(2)LcdShCh:在液晶显示屏上显示字符数据                 *
 0000           ; *(3)LcdShGrRe:在Lcd的指定行上显示或取消矩型边框        *
 0000           ; *(4)LcdShGrCil:在Lcd上显示或取消空心圆型               *
 0000           ; *-----------------------------------------------------*/
 0000           ; 
 0000           ; //包含头文件 
 0000           ; #include "gp32c.h"
 0000           ; #include "lcd.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 34
 0000           ;     LCD_CtrlPortDDR=0x07;      //控制口低三位设置为输出
 0000 A607              lda #7
 0002 B706              sta 0x6
 0004                   .dbline 35
 0004           ;       LCD_DataPortDDR=0xff;      //数据口设置为输出
 0004 A6FF              lda #-1
 0006 B705              sta 0x5
 0008                   .dbline 37
 0008           ;       //[Lcd初始化]
 0008           ;       delay40ms;                 //延时>40ms
 0008 452710            ldhx #10000
 000B 89                pshx
 000C 8B                pshh
 000D CD044D            jsr _DelayTimes
 0010 A702              ais #2
 0012                   .dbline 38
 0012           ;     Wtite_Command(0b00110000); //8位数据,基本指令
 0012 A630              lda #48
 0014 87                psha
 0015 CD0417            jsr _Wtite_Command
 0018 A701              ais #1
 001A                   .dbline 39
 001A           ;       Wtite_Command(0b00001100); //开显示
 001A A60C              lda #12
 001C 87                psha
 001D CD0417            jsr _Wtite_Command
 0020 A701              ais #1
 0022                   .dbline 40
 0022           ;       Wtite_Command(0b00000001); //清屏
 0022 A601              lda #1
 0024 87                psha
 0025 CD0417            jsr _Wtite_Command
 0028 A701              ais #1
 002A                   .dbline 41
 002A           ;       delay1600us;               //延时>1.6ms
 002A 450FA0            ldhx #4000
 002D 89                pshx
 002E 8B                pshh
 002F CD044D            jsr _DelayTimes
 0032 A702              ais #2
 0034                   .dbline 42
 0034           ;       Wtite_Command(0b00000110); //进入模式设定
 0034 A606              lda #6
 0036 87                psha
 0037 CD0417            jsr _Wtite_Command
 003A A701              ais #1
 003C                   .dbline 43
 003C           ;     LcdShGrClr();              //清Lcd图形显示屏
 003C CD0334            jsr _LcdShGrClr
 003F 95                tsx
 0040                   .dbline -2
 0040           L1:
 0040                   .dbline 0 ; func end
 0040 81                rts
 0041                   .dbend
 0041                   .dbfunc e LcdShCh _LcdShCh fV
 0041           ;              i -> 0,X
 0041           ;       LcdSBuff -> 3,X
 0041           _LcdShCh::
 0041                   .dbline -1
 0041 A7FF              ais #-1
 0043 95                tsx
 0044                   .dbline 53
 0044           ; }
 0044           ; 
 0044           ; //==================[Lcd显示字符操作]========================
 0044           ; /*LcdShCh:在液晶显示屏上显示字符数据-------------------*
 0044           ; *功  能:在液晶显示屏上显示以LcdSBuff为首地址的64个数据 *
 0044           ; *参  数:待显示的64个数据的首地址                       *
 0044           ; *返  回:无                                             *
 0044           ; *-----------------------------------------------------*/
 0044           ; void LcdShCh(unsigned char *LcdSBuff)
 0044           ; {
 0044                   .dbline 56
 0044           ;       unsigned char i;             //data数组计数器(0-63)
 0044           ;   //[Lcd显示64个数据]   
 0044           ;     Wtite_Command(0x80);         //DDRAM地址设置
 0044 A680              lda #-128
 0046 87                psha
 0047 CD0417            jsr _Wtite_Command
 004A A701              ais #1
 004C 95                tsx
 004D                   .dbline 57
 004D           ;       for(i=0;i<64;i++)            //显示data中的64个数据
 004D 7F                clr ,X
 004E 2065              bra L6
 0050           L3:
 0050                   .dbline 58
 0050           ;        { 
 0050                   .dbline 60
 0050           ;         //[Lcd按行显示16个数据]
 0050           ;         if((i<=15)||(i>=48))         //第一行和第四行不变
 0050 F6                lda ,X
 0051 A10F              cmp #15
 0053 2304              bls L9
 0055 A130              cmp #48
 0057 2519              blo L7
 0059           L9:
 0059                   .dbline 61
 0059           ;               Wtite_Data(LcdSBuff[i]);   
 0059 3F00              clr *__r0
 005B F6                lda ,X
 005C EB04              add 4,X
 005E B700              sta *__r1
 0060 B600              lda *__r0
 0062 E903              adc 3,X
 0064 B700              sta *__r0
 0066 5500              ldhx *__r0
 0068 F6                lda ,x
 0069 87                psha
 006A CD0432            jsr _Wtite_Data
 006D A701              ais #1
 006F 95                tsx
 0070 2042              bra L8
 0072           L7:
 0072                   .dbline 62
 0072           ;         else if(i<=31)       //显示的第二行为缓冲的第三行
 0072 F6                lda ,X
 0073 A11F              cmp #31
 0075 221A              bhi L10
 0077                   .dbline 63
 0077           ;           Wtite_Data(LcdSBuff[i+16]);
 0077 3F00              clr *__r0
 0079 EB04              add 4,X
 007B B700              sta *__r1
 007D B600              lda *__r0
 007F E903              adc 3,X
 0081 B700              sta *__r0
 0083 5500              ldhx *__r0
 0085 AF10              aix #16
 0087 F6                lda ,x
 0088 87                psha
 0089 CD0432            jsr _Wtite_Data
 008C A701              ais #1
 008E 95                tsx
 008F 2023              bra L11
 0091           L10:
 0091                   .dbline 65
 0091           ;         else                 //显示的第三行为缓冲的第二行
 0091           ;           Wtite_Data(LcdSBuff[i-16]);
 0091 3F00              clr *__r0
 0093 F6                lda ,X
 0094 A010              sub #16
 0096 B700              sta *__r1
 0098 B600              lda *__r0
 009A A200              sbc #0
 009C B700              sta *__r0
 009E B600              lda *__r1
 00A0 EB04              add 4,X
 00A2 B700              sta *__r1
 00A4 B600              lda *__r0
 00A6 E903              adc 3,X
 00A8 B700              sta *__r0
 00AA 5500              ldhx *__r0
 00AC F6                lda ,x
 00AD 87                psha
 00AE CD0432            jsr _Wtite_Data
 00B1 A701              ais #1
 00B3 95                tsx
 00B4           L11:
 00B4           L8:
 00B4                   .dbline 66
 00B4           L4:
 00B4                   .dbline 57
 00B4 7C                inc ,X
 00B5           L6:
 00B5                   .dbline 57
 00B5 F6                lda ,X
 00B6 A140              cmp #64
 00B8 2596              blo L3
 00BA                   .dbline -2
 00BA           L2:
 00BA A701              ais #1
 00BC                   .dbline 0 ; func end
 00BC 81                rts
 00BD                   .dbsym l i 0 c
 00BD                   .dbsym l LcdSBuff 3 pc
 00BD                   .dbend
 00BD                   .dbfunc e LcdShGrCil _LcdShGrCil fV
 00BD           ;              y -> 0,X
 00BD           ;        mistake -> 1,X
 00BD           ;              x -> 5,X
 00BD           ;            GrE -> 12,X
 00BD           ;        GrCilMV -> 11,X
 00BD           ;             CR -> 10,X
 00BD           ;             Cx -> 9,X
 00BD           ;             Cy -> 8,X
 00BD           _LcdShGrCil::
 00BD                   .dbline -1
 00BD A7FA              ais #-6
 00BF 95                tsx
 00C0                   .dbline 81
 00C0           ;        }        
 00C0           ; }
 00C0           ; 
 00C0           ; //=====[Lcd画图操作:包括画圆,画矩形框,图形清屏,画点等]=====
 00C0           ; /*LcdShGrCil:在Lcd上显示或取消空心圆型-----------------*
 00C0           ; *功  能:在Lcd上的指定位置显示或取消空心圆型            *
 00C0           ; *参  数:Cx为圆心横坐标,Cy为圆心纵坐标                  *
 00C0           ; *       CR为圆的半径,GrE确定图形是否有效               *
 00C0           ; *       GrCilMV为显示圆型时的正误差值                  *
 00C0           ; *       例如:半径为10,误差为4;半径为30,误差为30     *
 00C0           ; *返  回:无                                             *
 00C0           ; *-----------------------------------------------------*/
 00C0           ; void LcdShGrCil(unsigned char Cy,unsigned char Cx,
 00C0           ;                 unsigned char CR,unsigned char 
 00C0           ;                 GrCilMV,unsigned char GrE)
 00C0           ; {
 00C0                   .dbline 84
 00C0           ;   unsigned char x,y;            //坐标的循环控制变量
 00C0           ;   long int mistake;             //显示时的误差值
 00C0           ;   Wtite_Command(0b00110110);    //扩展指令,绘图开
 00C0 A636              lda #54
 00C2 87                psha
 00C3 CD0417            jsr _Wtite_Command
 00C6 A701              ais #1
 00C8 95                tsx
 00C9                   .dbline 85
 00C9           ;   for(y=Cy-CR;y<=Cy+CR;y++)
 00C9 E608              lda 8,X
 00CB E00A              sub 10,X
 00CD F7                sta ,X
 00CE CC024E            jmp L16
 00D1           L13:
 00D1                   .dbline 86
 00D1           ;       for(x=Cx-CR;x<=Cx+CR;x++)
 00D1 E609              lda 9,X
 00D3 E00A              sub 10,X
 00D5 E705              sta 5,X
 00D7 CC023E            jmp L20
 00DA           L17:
 00DA                   .dbline 87
 00DA           ;            {  
 00DA                   .dbline 88
 00DA           ;             mistake=(x-Cx)*(x-Cx)+(y-Cy)*(y-Cy)-CR*CR;
 00DA 3F00              clr *__r0
 00DC E609              lda 9,X
 00DE B700              sta *__r1
 00E0 3F00              clr *__r2
 00E2 E605              lda 5,X
 00E4 B000              sub *__r1
 00E6 B700              sta *__r1
 00E8 B600              lda *__r2
 00EA B200              sbc *__r0
 00EC B700              sta *__r0
 00EE 3F00              clr *__r2
 00F0 E608              lda 8,X
 00F2 B700              sta *__r3
 00F4 3F00              clr *__r4
 00F6 F6                lda ,X
 00F7 B000              sub *__r3
 00F9 B700              sta *__r3
 00FB B600              lda *__r4
 00FD B200              sbc *__r2
 00FF B700              sta *__r2
 0101 B600              lda *__r3
 0103 87                psha
 0104 B600              lda *__r2
 0106 87                psha
 0107 B600              lda *__r3
 0109 87                psha
 010A B600              lda *__r2
 010C 87                psha
 010D CD0000            jsr __mul16
 0110 A704              ais #4
 0112 4E0000            mov *__rlo,*__r3
 0115 4E0000            mov *__rhi,*__r2
 0118 B600              lda *__r1
 011A 87                psha
 011B B600              lda *__r0
 011D 87                psha
 011E B600              lda *__r1
 0120 87                psha
 0121 B600              lda *__r0
 0123 87                psha
 0124 CD0000            jsr __mul16
 0127 A704              ais #4
 0129 4E0000            mov *__rlo,*__r1
 012C 4E0000            mov *__rhi,*__r0
 012F B600              lda *__r1
 0131 BB00              add *__r3
 0133 B700              sta *__r1
 0135 B600              lda *__r0
 0137 B900              adc *__r2
 0139 B700              sta *__r0
 013B 3F00              clr *__r2
 013D E60A              lda 10,X
 013F B700              sta *__r3
 0141 3F00              clr *__r4
 0143 E60A              lda 10,X
 0145 87                psha
 0146 B600              lda *__r4
 0148 87                psha
 0149 B600              lda *__r3
 014B 87                psha
 014C B600              lda *__r2
 014E 87                psha
 014F CD0000            jsr __mul16
 0152 A704              ais #4
 0154 4E0000            mov *__rlo,*__r3
 0157 4E0000            mov *__rhi,*__r2
 015A B600              lda *__r1
 015C B000              sub *__r3
 015E B700              sta *__r1
 0160 B600              lda *__r0
 0162 B200              sbc *__r2
 0164 B700              sta *__r0
 0166 4F                clra
 0167 E702              sta 2,X
 0169 E701              sta 1,X
 016B B600              lda *__r1
 016D E704              sta 4,X
 016F B600              lda *__r0
 0171 E703              sta 3,X
 0173 2A04              bpl X0
 0175 6302              com 2,X
 0177 6301              com 1,X
 0179           X0:
 0179                   .dbline 90
 0179           ;             //误差在范围之内时,显示该点
 0179           ;             if((mistake<=GrCilMV)&&(mistake>=-GrCilMV))
 0179 3F00              clr *__r2
 017B 3F00              clr *__r1
 017D 3F00              clr *__r0
 017F E60B              lda 11,X
 0181 B700              sta *__r3
 0183 E604              lda 4,X
 0185 87                psha
 0186 E603              lda 3,X
 0188 87                psha
 0189 E602              lda 2,X
 018B 87                psha
 018C E601              lda 1,X
 018E 87                psha
 018F B600              lda *__r3
 0191 87                psha
 0192 B600              lda *__r2
 0194 87                psha
 0195 B600              lda *__r1
 0197 87                psha
 0198 B600              lda *__r0
 019A 87                psha
 019B CD0000            jsr __cmp32
 019E A708              ais #8
 01A0 9303              ble X2
 01A2 CC023C            jmp L21
 01A5           X2:
 01A5 3F00              clr *__r0
 01A7 E60B              lda 11,X

⌨️ 快捷键说明

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