登录 注册在线留言收藏驰宇微网站地图联系驰宇微 欢迎来到驰宇微科技官网!

咨询热线18926046819

深圳驰宇微科技有限公司

段码屏、液晶屏(LCD)定制点阵屏,液晶模块、生产与销售

当前位置:首页 » 驰宇微资讯中心 » 液晶模块技术参考 » 单片机设计使用时 液晶模组延时程序

单片机设计使用时 液晶模组延时程序

文章出处:责任编辑:查看手机网址
扫一扫!单片机设计使用时 液晶模组延时程序扫一扫!
人气:-发表时间:2017-07-19 10:46【

单片机是指一个集成在一块芯片上的完整计算机系统,它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU.内存和外部总线系统。目前很多设备都采用先进的液晶显示屏来显示设备需要直观的内容,有时候也会存在芯片和设备的设计匹配问题,会出现本身显示是显示4行而显示2行的内容以及设备的指令发送出来屏还没显示的问题,这个就是芯片和设备程序设计中软件延时的问题。驰宇微工程人员为大家准备了些延时程序,请参考。如有不了解请来电咨询驰宇微科技0755-29446830

513微秒延时程序
DELAY:   MOV      R2,#0FEH
DELAY1: DJNZ     R2,DELAY1
RET

 

;10毫秒延时程序
DL10MS: MOV      R3,#14H
DL10MS1:LCALL    DELAY
         DJNZ     R3,DL10MS1
         RET

 

;0.1s延时程序12mhz
DELAY: MOV R6,#250
DL1: MOV R7,#200
DL2: DJNZ R6,DL2
DJNZ R7,DL1
RET

 

;延时1046549微秒(12mhz)
;具体的计算公式是:
;((((r7*2+1)+2)*r6+1)+2)*r5+1+4 = ((r7*2+3)*r6+3)

*r5+5
DEL : MOV   R5,#08H
DEL1: MOV   R6,#0FFH
DEL2: MOV   R7,#0FFH
         DJNZ   R7,$
         DJNZ   R6,DEL2
         DJNZ   R5,DEL1
         RET

 

;1秒延时子程序是以12MHz晶振
Delay1S:mov   r1,#50
del0:   mov r2,#91
del1:    mov r3,#100  
         djnz r3,$  
         djnz r2,del1  
         djnz r1,del0
    Ret

 

;1秒延时子程序是以12MHz晶振为例算指令周期耗时
KK: MOV     R5,#10     ;1指令周期1
K1: MOV     R6,#0FFH     ;1指令周期10
K2: MOV     R7,#80H     ;1指令周期256*10=2560
K3: NOP          ;1指令周期

128*256*10=327680
DJNZ     R7,K3     ;2指令周期

2*128*256*10=655360
DJNZ     R6,K2     ;2指令周期

2*256*10=5120
DJNZ     R5,K1     ;2指令周期2*10=20
RET       
;2指令周期21+10+2560+327680+655360+5120+20+2=990753
;约等于11=1000000微秒

 


;这个算下来也只有0.998
T_0:   MOV    R7,#10;
D1:   MOV    R6,#200;
D2:   MOV    R5,#248;
   DJNZ    R5,$
   DJNZ    R6,D2;
   DJNZ    R7,D1;
   RET

 

;这样算下来应该是1.000011
T_0:   MOV    R7,#10;
D1:   MOV    R6,#200;
D2:   NOP
   MOV    R5,#248;
   DJNZ    R5,$
   DJNZ    R6,D2;
   DJNZ    R7,D1;
   RET

 

DELAY_2S:    ;10MS(11.0592mhz)
MOV R3,#200
JMP DELAY10MS
DELAY_100MS:     ;100MS(11.0592mhz)
MOV R3,#10
JMP DELAY10MS
DELAY_10MS:
MOV R3,#1
DELAY10MS:     ;去抖动10MS

 

(11.0592mhz)
MOV R4,#20
DELAY10MSA:
MOV R5,#247
DJNZ R5,$
DJNZ R4,DELAY10MSA
DJNZ R3,DELAY10MS
RET

 


  
DELAY_500MS:                     ;500500MS
MOV R2,#208
JMP DELAY_MS
DELAY_175MS:    ;175MS
MOV R2,#73
JMP DELAY_MS
delaY_120MS:    ;120MS
MOV R2,#50
JMP DELAY_MS
delay_60ms:    ;60ms
MOV R2,#25
JMP DELAY_MS
delay_30ms:    ;30ms
MOV R2,#12
JMP DELAY_MS
DELAY_5MS:    ;5MS
MOV R2,#2
;===================================
DELAY_MS:
CALL DELAY2400
DJNZ R2,DELAY_MS
RET
;===================================
DELAY2400:    ;10x244+4=2447

/1.024=2390
MOV   R0,#244   ;1
DELAY24001:
MUL AB   ;4
MUL AB   ;4
DJNZ R0,DELAY24001 ;2
RET

 

DELAY: ;延时子程序(1)
MOV R0,#0AH
DELAY1: MOV R1,#00H
DELAY2: MOV R2,#0B2H
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET


MOV R2,#10 ;延时1
LCALL DELAY
MOV R2,#50 ;延时5
LCALL DELAY
DELAY: ;延时子程序
PUSH R2
PUSH R1
PUSH R0
DELAY1: MOV R1,#00H
DELAY2: MOV R0,#0B2H
DJNZ R0,$
DJNZ R1,DELAY2 ;延时 100 mS
DJNZ R2,DELAY1
POP R0
POP R1
POP R2
RET

 

1:DEL:    MOV    R7,    #200

            DEL1:    MOV    R6,    #123

                         NOP

            DEL2:    DJNZ    R6,    DEL2

                         DJNZ    R7,    DEL1

                         RET

50.001ms 算法是:
0.001ms+200*0.001ms+200*0.001ms+200*123*0.002ms+200*0.002ms

;(123*2+4)*200+1

 

2: DEL: MOV R7, #200

DEL1: MOV R6, #123

DEL2:NOP

       DJNZ R6,DEL2

       DJNZ R7,DEL1

RET

 

D500MS:
PUSH PSW
SETB RS0
MOV R7,#200
D51: MOV R6,#250
D52: NOP
NOP
NOP
NOP
DJNZ R6,D52
DJNZ R7,D51
POP PSW
RET

 


DELAY: ;延时1毫秒
PUSH PSW
SETB RS0
MOV R7,#50
D1: MOV R6,#10
D2: DJNZ R6,$
DJNZ R7,D1
POP PSW
RET

 

   ORG    0
         LJMP     MAIN
             ORG     000BH
         LJMP     CTC0
    MAIN:   MOV    SP, #50H
           CLR    EA
           MOV    TMOD, #01H
           MOV     TH0,#3CH
           MOV     TL0,#0B0H
           MOV     R4,   #10
            SETB    ET0
            SETB    EA
            SETB    TR0
             SJMP   $   ;
    CTC0:    MOV   TH0, #3CH
            MOV   TL0, #0B0H
            DJNZ   R4, LP
            CPL    P1.0
            MOV    R4,   #10
      LP:     RETI
           END

...............................................................................................................

延时5秒左右
DELAY5S:PUSH    04H                 
         PUSH    05H             
         PUSH    06H                 
         MOV     R4,#50              
DELAY5S_0:MOV   R5,#200                               
DELAY5S_1:MOV   R6,#245                               
         DJNZ    R6,$                          
         DJNZ    R5,DELAY5S_1
         DJNZ    R4,DELAY5S_0                          
         POP     06H                   
         POP     05H                   
         POP     04H                   
         RET                                           

 

指令周期、机器周期与时钟周期
  指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。
  时钟周期:也称为振荡周期,一个时钟周期 =晶振的倒数。
  MCS-51单片机的一个机器周期=6个状态周期=12个时钟周期。
  MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*1/12000000=1µs
  程序分析
  例1 50ms 延时子程序:
     DELMOV R7#200         
     DEL1MOV R6#125         
     DEL2DJNZ R6DEL2        
           DJNZ R7DEL1        
     RET                        
  精确延时时间为:1+1*200+2*125*200+2*200+2
              =2*125+3*200+3        
              =50603µs
              ≈50ms
  由整理出公式(只限上述写法)延时时间=2*内循环+3*外循环+3         
  详解:DEL这个子程序共有五条指令,现在分别就 每一条指令 被执行的次数和所耗时间进行分析。
  第一句:MOV R7#200 在整个子程序中只被执行一次,且为单周期指令,所以耗时1µs
  第二句:MOV R6#125 看到只要R7-1不为0,就会返回到这句,共执行了R7次,共耗时200µs
  第三句:DJNZ R6DEL2 只要R6-1不为0,就反复执行此句(内循环R6次),又受外循环R7控制,所以共执行R6*R7次,因是双周期指令,所以耗时2*R6*R7µs
  例2 1秒延时子程序:
  DELMOV R7,#10           
  DEL1MOV R6#200        
  DEL2MOV R5#248        
  DJNZ R5$                
  DJNZ R6DEL2             
  DJNZ R7DEL1             
  RET                       
  对每条指令进行计算得出精确延时时间为:
  1+1*10+1*200*10+2*248*200*10+2*200*10+2*10+2
   =[2*248+3*200+3]*10+3
   =998033µs≈1s
  由整理得:延时时间=[2*第一层循环+3*第二层循环+3]*第三层循环+3   此式适用三层循环以内的程序,也验证了例1中式(第三层循环相当于1)的成立。
  注意,要实现较长时间的延时,一般采用多重循环,有时会在程式序里加入NOP指令,这时公式不再适用,下面举例分析。
  例3仍以1秒延时为例
  DELMOV R7,#10         1指令周期1
  DEL1MOV R6#0FFH     1指令周期10
  DEL2MOV R5#80H      1指令周期255*10=2550
  KONGNOP               1指令周期128*255*10=326400
  DJNZ R5$              2指令周期2*128*255*10=652800
  DJNZ R6DEL2           2指令周期2*255*10=5110
  DJNZ R7DEL1           2指令周期2*10=20
  RET                     2
  延时时间=1+10+2550+326400+652800+5110+20+2 =986893µs约为1s
  整理得:延时时间=[3*第一层循环+3*第二层循环+3]*第三层循环+3  
  结论:论文针对初学者的困惑,对汇编程序的延时算法进行了分步讲解,并就几种不同写法分别总结出相应的计算公式,只要仔细阅读例1中的详解,并用例2、例3来加深理解,一定会掌握各种类型程序的算法并加以运用。

ORG 0000H

START:MOV P1,#01111111B       ;最下面的LED点亮

   LCALL DELAY     ;延时60

   LCALL DELAY     ;延时60

   MOV P1,#10111111B             ;最下面第二个的LED点亮

   LCALL DELAY     ;延时60

   LCALL DELAY     ;延时60

   MOV P1,#11011111B             ;最下面第三个的LED点亮 (以下省略)

   LCALL DELAY

   LCALL DELAY     ;延时60

   MOV P1,#11101111B

   LCALL DELAY

   LCALL DELAY     ;延时60

   MOV P1,#11110111B

   LCALL DELAY

   LCALL DELAY     ;延时60

   MOV P1,#11111011B

   LCALL DELAY     ;延时60

   LCALL DELAY     ;延时60

   LCALL DELAY     ;延时60

   LCALL DELAY     ;延时60

   LCALL DELAY              ;完成第一次循环点亮,延时约0.25

   AJMP START                     ;反复循环

 

;延时子程序,12M晶振延时约250毫秒

DELAY:     ;大约值:2us*256*256*2=260ms,也可以认为为250ms

PUSH PSW    ;现场保护指令(有时可以不加)

MOV R4,#240   

L3: MOV R2 ,#00H

L1: MOV R3 ,#00H

L2: DJNZ R3 ,L2    ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2

 DJNZ R2 ,L1    ; 中层循环:256

 DJNZ R4 ,L3    ;外层循环:240

 POP PSW

 RET

 END

 

 

#include<reg52.h>

#include<stdio.h>

 

void delaym(unsigned int t)   // 延时子程序,入口参数ms,延迟时间=t*1ms,t=0~65535

 

{

unsigned char j;        //j=0~255

while(t--)

{

for(j = 0; j < 125; j++);   //j进行的内部循环,1次延迟8us

}

}

 

 

unsigned char a[24]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7e,0xbd,0xdb,0xe7,

                    0xe7,0xdb,0xbd,0x7e,0xfc,0xf3,0xcf,0x3f,0x3f,0xcf,0xf3,0xfc};


void main()

{

  unsigned int i;

 

  while(1)

{


 for(i=0;i<24;i++)

 {

  P0=a[i];

  

  delaym(1000);  //调用延迟程序1000*1ms=1

  


  }


}

 

 

}


相关资讯

   

驰宇微首页 | 图形点阵液晶模块 | 中文字库液晶模块 | 字符型液晶模块 | 段码液晶模块 | 产品列表 | 站点地图 | 关于驰宇微

公司名称: 深圳驰宇微科技有限公司   备案号:粤ICP备14047421号
公司地址:深圳市龙华区大浪街道华昌路241号鸿源工业区E栋5层
公司电话:0755-29446830  13640934827
邮 箱:18926046819@163.com Q Q:577895076
版权归深圳驰宇微科技所有