历史上的今天
今天是:2024年10月17日(星期四)
2019年10月17日 | PIC单片机在ICD做lcd显示时钟演示程序
2019-10-17 来源:eefocus
;*************************************************
;* CLKTEST.ASM *
;*-----------------------------------------------*
;*-----------------------------------------------*
;*************************************************
;* ICDDEMO教学实验板 lcd显示时钟演示程序 *
;*************************************************
include ;*---- ; 定义 LCD数据& 控制I/O口 LCD_DATA equ PORTB LCD_CNTL1 equ PORTB LCD_CNTL2 equ PORTA ; 定义 LCD控制相应的I/O引脚 RS equ 1 E equ 5 ; LCD 模块命令 DISP_ON EQU 0x00C ; 开显示 DISP_ON_C EQU 0x00E ; 开显示, 开指针 DISP_ON_B EQU 0x00F ; 开显示, 开指针,开闪烁 DISP_OFF EQU 0x008 ; 关显示 CLR_DISP EQU 0x001 ; 清显示的操作数 ENTRY_INC EQU 0x006 ; 操作数 ENTRY_INC_S EQU 0x007 ; 操作数 ENTRY_DEC EQU 0x004 ; 操作数 ENTRY_DEC_S EQU 0x005 ; 操作数 DD_RAM_ADDR EQU 0x080 ; 初始化第一行显示的操作数 DD_RAM_UL EQU 0x0c0 ; 初始化第二行显示的操作数 ; 设置显示相关寄存器 Byte EQU 20H Count EQU 21H Count1 EQU 22H Count2 EQU 23H LCD_DATA1 EQU 24H PORTDB EQU 25H Temp EQU 26H TempH EQU 27H TempL EQU 28H INTSIG EQU 29H RTCCSIG1 EQU 2AH RTCCSIG EQU 2BH ALRSIG EQU 2CH Hour EQU 2DH HourH EQU 2EH HourL EQU 2FH HourL1 EQU 30H HourH1 EQU 31H Mins EQU 32H Mins1 EQU 33H MinsH EQU 34H MinsL EQU 35H MinsH1 EQU 36H MinsL1 EQU 37H Secs EQU 38H SecsH EQU 39H SecsL EQU 3AH ALRH1 EQU 3BH ALRM1 EQU 3CH ALRH2 EQU 3DH ALRM2 EQU 3EH ALRH3 EQU 3FH ALRM3 EQU 40H _WREG EQU 41H _STATUS EQU 42H Hour1 EQU 43H ADRESB EQU 44H BKM EQU 45H ;*---- org 0 nop goto start org 4 goto ISR org 10 CalTable bcf STATUS,RP0 bcf PCLATH,0 movlw 0x66 ; 进行校准处理 subwf Temp,w ; addwf PCL,f ; 将补偿结果与 PCL相加 dt 0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5 dt 6,6,6,7,7,7,8,8,8,9,9,0xa,0xa,0xb,0xb,0xc,0xc dt 0xd,0xd,0xe,0xe,0xf,0xf,0xf,0x10,0x10,0x10 dt 0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x14,0x14,0x14 dt 0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x18,0x18 dt 0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c dt 0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20 dt 0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x24,0x25,0x25 dt 0x26,0x26,0x27,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b dt 0x2c,0x2d,0x2e,0x2f,0x30,0x32 start call InitLCD clrf RTCCSIG clrf RTCCSIG1 clrf INTSIG clrf Hour clrf Hour1 clrf Mins clrf Mins1 clrf Secs clrf ALRSIG movlw 20h movwf BKM movlw b'10001111' movwf PORTDB movlw 0ffh movwf TMR0 movlw 00 movwf TMR1L movlw 80h movwf TMR1H movlw b'00001111' movwf T1CON bsf STATUS,RP0 bsf PIE1,TMR1IE bcf STATUS,RP0 movlw b'10111111' OPTION movlw b'11110000' movwf INTCON main movlw 80h call SendCmd call DisplayTime ;显示时间 movlw 0c0h call SendCmd movlw 'H' call putcLCD movlw 'e' call putcLCD movlw 'l' call putcLCD movlw 'l' call putcLCD movlw 'o' call putcLCD movlw ' ' call putcLCD movlw '!' call putcLCD movlw ' ' call putcLCD movlw ':' call putcLCD movlw ')' call putcLCD movlw ' ' call putcLCD movlw ' ' call putcLCD call BkLight ;背光控制 call TempM ;显示温度 btfsc ALRSIG,1 call ALR1 btfsc ALRSIG,2 call ALR2 btfsc ALRSIG,3 call ALR3 bcf STATUS,RP0 bcf PCLATH,0 movf RTCCSIG,W addwf PCL,1 goto main goto RtccS1 goto RtccS2 goto Rtccs3 goto Rtccs4 clrf RTCCSIG clrf RTCCSIG1 goto main ;*===== ALR1 bcf STATUS,RP0 movf Hour,W xorwf ALRH1,W btfss STATUS,Z goto ALREND movf Mins,W xorwf ALRM1,W btfss STATUS,Z goto ALREND bsf STATUS,RP0 clrf TRISD bcf STATUS,RP0 bcf STATUS,C rlf PORTDB,1 btfsc STATUS,C bsf PORTDB,0 movf PORTDB,W movwf PORTD return ;*--- ALR2 bcf STATUS,RP0 movf Hour,W xorwf ALRH2,W btfss STATUS,Z goto ALREND movf Mins,W xorwf ALRM2,W btfss STATUS,Z goto ALREND bsf STATUS,RP0 clrf TRISD bcf STATUS,RP0 bcf STATUS,C rlf PORTDB,1 btfsc STATUS,C bsf PORTDB,0 movf PORTDB,W movwf PORTD return ;*---- ALR3 bcf STATUS,RP0 movf Hour,W xorwf ALRH3,W btfss STATUS,Z goto ALREND movf Mins,W xorwf ALRM3,W btfss STATUS,Z goto ALREND bsf STATUS,RP0 clrf TRISD bcf STATUS,RP0 bcf STATUS,C rlf PORTDB,1 btfsc STATUS,C bsf PORTDB,0 movf PORTDB,W movwf PORTD return ;*--- ALREND bsf STATUS,RP0 movlw 0ffh movwf TRISD return ;*===== RtccS1 movlw 80h call SendCmd call DisplayTime call LongDelay movlw 0c0h call SendCmd ;line2, 00 movlw 'S' call putcLCD movlw 'e' call putcLCD movlw 't' call putcLCD movlw ' ' call putcLCD movlw 'T' call putcLCD movlw 'i' call putcLCD movlw 'm' call putcLCD movlw 'e' call putcLCD ;show "Set Time" movlw ' ' call putcLCD movlw ' ' call putcLCD movlw ' ' call putcLCD movlw ' ' call putcLCD bsf PCLATH,0 movf RTCCSIG1,W addwf PCL,1 goto SetHour goto SetMins clrf INTSIG incf RTCCSIG clrf RTCCSIG1 goto main ;*---- SetHour movlw 80h call Selshow movlw d'24' subwf INTSIG,W btfsc STATUS,C goto $+4 movf INTSIG,w movwf Hour goto RtccS1 clrf INTSIG movwf Hour goto RtccS1 ;*---- SetMins movlw 83h call Selshow movlw d'60' subwf INTSIG,W btfsc STATUS,C goto $+4 movf INTSIG,w movwf Mins goto RtccS1 clrf INTSIG movwf Mins goto RtccS1 ;*===== RtccS2 bcf STATUS,RP0 movlw 0c0h call SendCmd call Alarm movlw '1' call putcLCD movlw ' ' call putcLCD S2 movlw 80h call SendCmd call DisplayTime call DispTime call LongDelay bsf PCLATH,0 movf RTCCSIG1,W addwf PCL,1 goto SetAlH2 goto SetAlM2 movf Hour1,w movwf ALRH1 movf Mins1,w movwf ALRM1 clrf INTSIG clrf RTCCSIG1 incf RTCCSIG goto main ;*--- SetAlH2 movlw 0c7h call Selshow movf INTSIG,W btfss STATUS,Z bsf ALRSIG,1 movf INTSIG,W movwf Hour1 movlw d'24' subwf Hour1,W btfss STATUS,C goto S2 clrf INTSIG clrf Hour1 goto S2 SetAlM2 movlw 0cah call Selshow movf INTSIG,W btfss STATUS,Z bsf ALRSIG,1 movf INTSIG,W movwf Mins1 movlw d'60' subwf Mins1,W btfss STATUS,C goto S2 clrf INTSIG clrf Mins1 goto S2 ;*---- Alarm movlw 'A' call putcLCD movlw 'l' call putcLCD movlw 'a' call putcLCD ; movlw 'r' call putcLCD movlw 'm' call putcLCD ; return ;*---- Selshow call SendCmd movlw ' ' call putcLCD movlw ' ' call putcLCD call LongDelay return ;*===== Rtccs3 bcf STATUS,RP0 movlw 0c0h call SendCmd call Alarm movlw '2' call putcLCD movlw ' ' call putcLCD S3 movlw 80h call SendCmd call DisplayTime call DispTime call LongDelay bsf PCLATH,0 movf RTCCSIG1,w addwf PCL,1 goto SetAlH3 goto SetAlM3 movf Hour1,w movwf ALRH2 movf Mins1,w movwf ALRM2 clrf INTSIG clrf RTCCSIG1 incf RTCCSIG goto main ;*--- SetAlH3 movlw 0c7h call Selshow movf INTSIG,W btfss STATUS,Z bsf ALRSIG,2 movf INTSIG,W movwf Hour1 movlw d'24' subwf Hour1,W btfss STATUS,C goto S3 clrf INTSIG clrf Hour1 goto S3 SetAlM3 movlw 0cah call Selshow movf INTSIG,W btfss STATUS,Z bsf ALRSIG,1 movf INTSIG,W movwf Mins1 movlw d'60' subwf Mins1,W btfss STATUS,C goto S3 clrf INTSIG clrf Mins1 goto S3 ;*===== Rtccs4 movlw 80h call SendCmd call DisplayTime bcf STATUS,RP0 movlw 0c0h call SendCmd call Alarm movlw '3' call putcLCD movlw ' ' call putcLCD S4 call DispTime call LongDelay bsf PCLATH,0 movf RTCCSIG1,w addwf PCL,1 goto SetAlH4 goto SetAlM4 movf Hour1,w movwf ALRH3 movf Mins1,w movwf ALRM3 clrf INTSIG clrf RTCCSIG1 incf RTCCSIG goto main ;*--- SetAlH4 movlw 0c7h call Selshow movf INTSIG,W btfss STATUS,Z bsf ALRSIG,3 movf INTSIG,W movwf Hour1 movlw d'24' subwf Hour1,W btfss STATUS,C goto S4 clrf INTSIG clrf Hour1 goto S4 SetAlM4 movlw 0cah call Selshow movf INTSIG,W btfss STATUS,Z bsf ALRSIG,1 movf INTSIG,W movwf Mins1 movlw d'60' subwf Mins1,W btfss STATUS,C goto S4 clrf INTSIG clrf Mins1 goto S4 ;*===== ISR Push movwf _WREG ; 存 WREG状态 swapf STATUS,W ; 存 STATUS movwf _STATUS ;*---- bcf STATUS,RP0 btfsc PIR1,TMR1IF call TimeAdj btfsc INTCON,INTF call IntDeal btfsc INTCON,T0IF call RtccDeal ;*---- Pop swapf _STATUS,W ; Restore STATUS movwf STATUS swapf _WREG,F ; Restore WREG w/o swapf _WREG,W ; affecting STATUS retfie ;*===== TimeAdj bcf STATUS,RP0 bcf PIR1,TMR1IF movlw 00h movwf TMR1L movlw 80h movwf TMR1H incf Secs,1 movlw d'60' xorwf Secs,W btfss STATUS,Z goto TE clrf Secs incf Mins,1 movlw d'60' xorwf Mins,W btfss STATUS,Z goto TE clrf Mins incf Hour movlw d'24' xorwf Hour,W btfss STATUS,Z goto TE clrf Hour TE return ;*===== IntDeal bcf INTCON,INTF bsf PORTB,0 btfsc PORTB,0 ; goto $+5 ; call Delay bsf PORTB,0 ; 按键去抖动 btfsc PORTB,0 goto $+2 ; / incf INTSIG return ;*===== RtccDeal bcf STATUS,RP0 movlw 0ffh ; movwf TMR0 bcf INTCON,T0IF bsf PORTA,4 btfsc PORTA,4 ; goto RtcWr ; call Delay bsf PORTA,4 ; 按键去抖动 btfsc PORTB,4 goto RtcWr ; / movf RTCCSIG,W sublw 04h btfss STATUS,C goto WRONG movf RTCCSIG1,W sublw 03h btfss STATUS,C goto WRONG movf RTCCSIG,W addwf RTCCSIG1,W btfsc STATUS,Z goto $+3 incf RTCCSIG1 goto RtcWr incf RTCCSIG goto RtcWr WRONG clrf RTCCSIG clrf RTCCSIG1 RtcWr return ;*===== BkLight bsf STATUS,RP0 bcf ADCON1,ADFM ;ADRESH all 8-bit,H bcf STATUS,RP0 movlw b'01010001' movwf ADCON0 ;select AD2,Fosc/8 decfsz BKM goto $-1 bsf ADCON0,GO btfss PIR1,ADIF goto $-1 bcf PIR1,ADIF ;READ ADRES--- movf ADRESH,W movwf ADRESB bsf STATUS,RP0 bcf TRISE,0 ;SELECT RE0 OUTPUT bcf STATUS,RP0 movlw b'10000000' ;critical value of lightness subwf ADRESB,W btfss STATUS,C goto $+4 ;c=0,ADRESB bsf PORTE,0 ;c=1,backlight on goto $+3 bcf STATUS,RP0 bcf PORTE,0 movlw 20h movwf BKM return ;*===== TempM ;temprature measure bsf STATUS,RP0 bcf ADCON1,ADFM ;ADRESH all 8-bit bcf STATUS,RP0 movlw b'01001001' ;select AD1,FOSC/8 movwf ADCON0 decfsz BKM goto $-1 bsf ADCON0,GO btfss PIR1,ADIF goto $-1 bcf PIR1,ADIF ;bsf STATUS,RP0 movf ADRESH,W ;bcf STATUS,RP0 movwf Temp call CalTable movwf Temp call Bin2BCDT ; 进行BCD码调整 movlw 08ah ; 从第一行的第0A个位置开始 call SendCmd movf TempH,W ; 显示温度 call putcLCD movf TempL,W call putcLCD movlw 'C' ; 显示“C”(表示摄氏度) call putcLCD movlw 20h movwf BKM return ;************************************************ ;* Bin2BCDT - 将 Temp 寄存器内的二进制数转 * ;* 换为相应的 ASCII 码并存为 TempH:TempL 的形式 * ;************************************************ Bin2BCDT bcf STATUS,RP0 clrf TempH ; Initialize variables movf Temp,W movwf TempL Ttenth ; Subtract 10 from low variable movlw .10 ; until result is < 0. On each subwf TempL,W ; subtraction, increment the btfss STATUS,C ; temperature high byte. goto Over0 movwf TempL incf TempH,F goto Ttenth Over0 movlw 0x30 ; Make decimal ASCII by adding addwf TempH,F ; '0' to high and low byte addwf TempL,F return ;************************************************* ;* DisplayTime - 将显示指针移至第一行,调用Bin2BCD* ;* 子程序将Secs 和 Mins寄存器内的数据转换为相应的* ;* ASCII 码, 然后送 LCD显示. * ;************************************************* DisplayTime bcf STATUS,RP0 call Bin2BCD ; 调用二进制与bcd码转换子程序 movf HourH,W ; 显示小时高位 call putcLCD ; movf HourL,W ; 显示小时低位 call putcLCD ; movlw ':' call putcLCD ; 显示 ':' movf MinsH,W ; 显示分钟高位
史海拾趣
|
最近我使用IWOW的TR800来做一个无线数传的项目,我在想移动既然分配给模块的ip是内网ip,那是否意味着两个模块连上GPRS网络之后,他们都是获得同一内网里的ip,就像连接到同一路由器里面的两台机器一样? 另外共享一下我觉得不错的技术QQ群 群5 ...… 查看全部问答> |
|
本人一直在一家电源IC原厂华东区做FAE,07年公司从linear挖了一个团队进入LED驱动行业,我随之也开始进入这个行业。在勤勤勉勉的耕耘3年中,我从学习到与客户分享我的学习经验,很多客户都会跟我讲,王工,从你身上我学到了很多。但这时我告诫自己 ...… 查看全部问答> |
|
原来用的6416的片子,现在用的2407,想问下怎么能一上电就让dsp芯片运行我的程序?小弟新手希望各位大侠教的详细点,有资料发我邮箱也可以hljlishen0517@gmail.com 多谢各位了… 查看全部问答> |
|
小弟最近遇到个问题: 在vxworks中包含usb mass storage的相关组件,启动目标板后,插入U盘,读写操作都正确,但是拔掉后,再插入,就报告dosFsDevCreate失败,查看错误号,说是设备已存在,使用 hdr = iosDevFind(\"/usb/bd\", 0); iosDevDelet ...… 查看全部问答> |
|
主板芯片: Intel 6700 PXH 64 bit PCI Express to PCI-X Hub,CPU是INTEL的 Sossaman。 现在就是没有仿真到芯片组,另外,因为没有Super I/O芯片,CPLD时序设置也有点不太清楚。 请高手帮忙调试出来。 我的msn:dq_lu@hotmail.com … 查看全部问答> |
|
74系列芯片功能大全 这里是常用74系列芯片功能大全很有收藏价值 7400 TTL 2输入端四与非门7401 TTL 集电极开路2输入端四与非门7402 TTL 2输入端四或非门7403 TTL 集电极开路2输入端四与非门7404 TTL 六反相器7405 TTL 集电极开路六反相 ...… 查看全部问答> |
|
这个电路在很多网站都有 对它解释也是相同 “这是一种用于三相三线制电源缺相保护电路,A、B、C缺任何一相,光耦器输出电平低于比较器的反相输入端的基准电压,比较器输出低电平,封锁PWM驱动信号,关闭电源。比较器输入极性稍加变动 ...… 查看全部问答> |
|
TPS5430DDAR芯片过回流焊后无法正常工作,重新焊接上正常工作 如题,TPS5430DDAR芯片经过热风回流焊,峰值温度230℃左右,测试电源无法工作,将两片TPS5430DDAR用烙铁取下,交换下重新焊接上去,电源正常工作,请问这是什么原因??????… 查看全部问答> |




