打印

新手入门,希望交流,恳请指教!

[复制链接]
2059|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyuaug|  楼主 | 2009-5-20 09:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
se, CD, LCD, HC
****************************************************
因为是LCD是3个COM口,显示1个数字,
我分了三次调用,
这样显示第1个数是正确的,
到第2个的数字显示的就不正确了,不知怎样实现?
1+3,2+6,3+9,4+12
希望交流,得到指点。
*****************************************************
;Company :
;File Name : 123.asm
;Author :
;Create Data : 2009-05-11
;Last Modified : 2009-05-11
;Description :
;Version : 1.0
;ldi TBR ,0x0F  
;sta PULLCTL
;*****************************************************        
    ie  equ 00h
    irq equ 01h
    tm0 equ 02h
    tl0 equ 04h
    th0 equ 05h
    setting equ 13h
    fae equ 14h
    duty equ 15h
    tbr equ 0eh
    inx equ 0fh
    dpl EQU 10H ;INX 数据指针低四位
    dpm EQU 11H ;INX 数据指针中三位
    dph EQU 12H ;INX 数据指针高三位
    
    seg1 equ 300h
    seg2 equ 301h
    seg3 equ 302h
    seg4 equ 303h
    seg5 equ 304h
    seg6 equ 305h
    seg7 equ 306h
    seg8 equ 307h
    seg9 equ 308h
    seg10 equ 309h
    seg11 equ 30ah
    seg12 equ 30bh
    seg13 equ 30ch
    seg14 equ 30dh
    seg15 equ 30eh
    seg16 equ 30fh
    seg17 equ 310h
    seg18 equ 311h
    seg19 equ 312h
            
    flag equ 20h
    test equ 21h
    key_cnt equ 22h
    delay_1 equ 23h
    delay_2 equ 24h
    ct0 equ 25h
    x equ 26h
    x_ac equ 27h
    y equ 28h
    z equ 29h
    setp equ 30h
    numb equ 31h
    step equ 32h
    
    cyc equ 33h
    cyc1 equ 34h
    cyc2 equ 35h
    
    com0 equ 39h
    com1 equ 40h
    com2 equ 41h
    
    p0 equ 08h
    p1 equ 09h
    p2 equ 0ah
                
    ORG 0000H
;TODO: Add your assembly code here    
    jmp start
    org 0001h;exint
    rtni                
    org 0002h;t0_int
    rtni    
    org 0003h;t1_int
    rtni
    org 0004h;pbc_int
    rtni            
        org 0020H
////////////////////////////////            
start:    
    ldi ct0,0
    ldi x_ac,0
    ldi x,0
    ldi y,0
    ldi z,0    
    ldi p0,1111b
    ldi p1,1111b
    ldi p2,1111b
    ldi setting,0000b
    ldi duty,0    
////////////clr lcd_ram //////////
CLR_LCD:
    LDI dpl,00H
    LDI dpm,00H
    LDI dph,06H
CLR_LCD_1:
    LDI inx,00H
    ADIM dpl,01H
CLR_LCD_2:
    SBI dpl,0fH
    BNZ CLR_LCD_1
//////////////////////////////////
    ldi cyc,02h
cyc_cyc:
    call delay_ct
//////////////lcd full shine//////
bs_LCD:
    LDI dpl,02H
    LDI dpm,00H
    LDI dph,06H
bs_LCD_1:
    LDI inx,1111b
    ADIM dpl,01H
bs_LCD_2:
    SBI dpl,0fH
    BNZ bs_LCD_1
//////////////////////////////////    
    call delay_ct    
///////////lcd show 0/////////////
    ldi tbr,0101b  
//    sta seg1
        sta seg4
    sta seg7
    sta seg10
    sta seg13
    ldi tbr,0011b
//    sta seg2 
    sta seg5
    sta seg8
    sta seg11
    sta seg14
    ldi tbr,0101b 
    ;sta seg3
    sta seg6
    sta seg9
    sta seg12
    sta seg15
////////////////////////////    
    sbim cyc,01
    bnz  cyc_cyc
////////////////////////////
power_on_lcd:
    call delay_ct
    call lcd_disp
    call delay_ct    
///////////////////////////
    adim x,01h
    sta x_ac
    sbim x,0bh 
    bnc power_on_lcd ;;if<4 c=0
    ldi x,0        
    jmp start        
////////////判断是=0///////       
lcd_disp:
    lda x_ac
    sta y
    sta z
    andim x_ac,1111b
    baz first_disp;if a=0 ac=0
    jmp second_disp
first_disp:    
    adim y,01h
    sta setp
    jmp lcd_disp_1
///////////>=1//////////    
second_disp:    
    ldi setp,03h
lcd_disp_1:
/////////com0///////////
    lda z
    addm setp            
    ldi tbr,0fh
    lda setp
    call 07f0h
    sta seg13
/////////com1///////////    
    adim setp,01
    ldi tbr,0fh
    lda setp
    call 07f0h
    sta seg14
////////com2////////////    
    adim setp,01    
    ldi tbr,0fh
    lda setp
    call 07f0h
    sta seg15
////////////////////////
    andim setp,0000b
    lda z
    sta x
    rtni
/////////////disp_lcd_delay/////////      
delay_ct:
    ldi ct0,0eh   
////////key_delay///////////////////     
delay:
    LDI delay_1,09H
    LDI delay_2,0EH
    SBIM delay_2,01H
    BC $-1
    SBIM delay_1,01H
    bC $-4
    sbim ct0,01h
    bc $-7
    RTNI
//// 显示数据表:根据LCD 的矩阵表定出数据表
//// 是按cb gda ef 来建立的    
    org 07f0h
    tjmp            //07f0h
    rtnw 1111b,0101b    //0//07f1h
    rtnw 1111b,0011b    //07f2h
    rtnw 1111b,0101b    //07f3h
    
    rtnw 1111b,0000b    //1
    rtnw 1111b,0000b
    rtnw 1111b,0101b
    
    rtnw 1111b,0100b    //2
    rtnw 1111b,0111b
    rtnw 1111b,0001b

    rtnw 1111b,0000b    //3
    rtnw 1111b,0111b    //fa
    rtnw 1111b,0101b
    
    rtnw 1111b,0001b    //4
    rtnw 1111b,0100b
    rtnw 1111b,0101b
    
//    rtnw 1111b,0001b    //5    //ff
//    rtnw 1111b,0111b
//    rtnw 1111b,0100b

//    rtnw 1111b,0101b    //
//    rtnw 1111b,0111b
//    rtnw 1111b,0100b
//    rtnw 1111b,0000b    //7
//    rtnw 1111b,0001b
//    rtnw 1111b,0101b
    
//    rtnw 1111b,0101b    //8
//    rtnw 1111b,0111b
//    rtnw 1111b,0101b
    
//    rtnw 1111b,0001b    //9
//    rtnw 1111b,0111b
//    rtnw 1111b,0101b    //org 08fa
    
    org 07ffh
//    tjmp
;******************************
         
         
    END
沙发
warm_ice| | 2009-5-20 09:55 | 只看该作者

交流没问题,请把资料补全些

是哪颗IC?程序的部分是否可注释一下?这样看起来让别人更明白您的想法,更容易看出是哪出了问题.

使用特权

评论回复
板凳
gaoyuaug|  楼主 | 2009-5-21 13:46 | 只看该作者

新手再贴!整理了下思路。

谢谢帮主的指导思路。
我用的是ICE66 EVBDSH6612.
-----------------------------------------------------------
只是我混乱了数据存储器SETP,
以上程序可以正常实现4个数的LCD显示(因显示4以后SETP的值为F)。
------------------------------------------------------------
如果把这看作是正半部份,
10个数字分两组调用:
0-4 07F0H--07FFH
那么下半部份也应该写同样的
5-9 07E0H--07EFH
因为新手,没有更多的实例参考,我不知道这样是不是正确的?

使用特权

评论回复
地板
warm_ice| | 2009-5-21 13:58 | 只看该作者

这有份资料,您看一下,应该会有帮助

http://www.sinowealth.com/ftp/4bit/pdf/zh/2.pdf

使用特权

评论回复
5
gaoyuaug|  楼主 | 2009-5-21 16:19 | 只看该作者

帮主的程序是看懂了!

帮主也是实在人,不发LCD的
只发了LED的
一下面对那么的变量,
我被搞得晕头转向,头昏脑涨!
一下又不知搞到哪了去!
谢谢帮主的支持!

使用特权

评论回复
6
gaoyuaug|  楼主 | 2009-5-23 11:22 | 只看该作者

10个数字可以计数啦,只是SETP这个东西

;*****************************************************
;Company :
;File Name : 123.asm
;Author :
;Create Data : 2009-05-11
;Last Modified : 2009-05-11
;Description :
;Version : 1.0
list p=6612
;*****************************************************        
    ie  equ 00h
    irq equ 01h
    tm0 equ 02h
    tl0 equ 04h
    th0 equ 05h
    p0 equ 08h
    p1 equ 09h
    p2 equ 0ah
    setting equ 13h
    fae equ 14h
    duty equ 15h
    tbr equ 0eh
    inx equ 0fh
    dpl EQU 10H ;INX 数据指针低四位
    dpm EQU 11H ;INX 数据指针中三位
    dph EQU 12H ;INX 数据指针高三位
///////////////////////////            
    setp_bak equ 20h
    test equ 21h
    key_cnt equ 22h
    delay_1 equ 23h
    delay_2 equ 24h
    ct0 equ 25h
    x equ 26h
    x_ac equ 27h
    y equ 28h
    z equ 29h
    setp equ 30h
    numb equ 31h    
    x1 equ 33h
    x1_ac equ 34h
    y1 equ 35h
    z1 equ 36h    
    setp_bak1 equ 3AH
    setp_bak2 equ 3bH
    setp_bak3 equ 3ch
///////////////////////
    seg1 equ 300h
    seg2 equ 301h
    seg3 equ 302h
    seg4 equ 303h
    seg5 equ 304h
    seg6 equ 305h
    seg7 equ 306h
    seg8 equ 307h
    seg9 equ 308h
    seg10 equ 309h
    seg11 equ 30ah
    seg12 equ 30bh
    seg13 equ 30ch
    seg14 equ 30dh
    seg15 equ 30eh
    seg16 equ 30fh
    seg17 equ 310h
    seg18 equ 311h
    seg19 equ 312h
///////////////////////////                    
    ORG 0000H
;TODO: Add your assembly code here    
    jmp sys_reset
    org 0001h;exint
    rtni                
    org 0002h;t0_int
    rtni    
    org 0003h;t1_int
    rtni
    org 0004h;pbc_int
    rtni            
        org 0020H
////////////Ram_inti////////////////////            
sys_reset:
    ldi delay_1,0
    ldi delay_2,0    
    ldi ct0,0
    ldi x_ac,0
    ldi x,0
    ldi y,0
    ldi z,0    
    ldi x1_ac,0
    ldi x1,0
    ldi y1,0
    ldi z1,0        
    ldi setp,0
    ldi setp_bak,0
    ldi setp_bak1,0
    ldi setp_bak2,0
    ldi setp_bak3,0
    ldi p0,1111b
    ldi p1,1111b
    ldi p2,1111b
    ldi setting,0000b
    ldi duty,0        
//////////////////////////////////////
CLR_LCD:
    LDI dpl,03H
    LDI dpm,00H
    LDI dph,06H
CLR_LCD_1:
    LDI inx,00H
    ADIM dpl,01H
CLR_LCD_2:
    SBI dpl,0fH
    BNZ CLR_LCD_1
work_start:
    /////////////
    call delay_ct
    call lcd_disp
    call delay_ct    
///////////////////////////
work_start1:
    ldi setp,0
    adim x,01h
    sta x_ac
    sbi x,0ah 
    bnc work_start
    ldi x,0        
    jmp sys_reset            
//////////////lcd show count number////////////////       
lcd_disp:    
/////////first_lcd//////////////////    
first:
    lda setp_bak
    sta setp    
    sbi x,05h    
    bnc jx        
    //////////////
    ;call delay_ct      
     jmp lcd_h_disp;=5 goto h
    ;call delay_ct
    /////////////
     jmp work_start;1
jx:    ;<=4
    andim x,1111b
    baz $+2        ;if a=0?    
    jmp lcd_disp_1  ;
    adim x_ac,01h    ;+1
    ldi setp,00h
///////////<=4////////////////
lcd_disp_1:
/////////////show com0    
    adim setp,01h            
    ldi tbr,0fh
    lda setp
    call 07f0h
    sta seg13
/////////////show com1    
    adim setp,01
    ldi tbr,0fh
    lda setp
    call 07f0h
    sta seg14
/////////////show com2    
    adim setp,01    
    ldi tbr,0fh
    lda setp
    call 07f0h
    sta seg15
    lda setp
    sta setp_bak
    andim setp,0
    rtni    
/////////////>=5/////////////        
lcd_h_disp:
    sbi x,05
    baz five_cl    
    jmp lcd_disp_h 
five_cl:
    andim setp,0
    andim setp_bak1,0 
lcd_disp_h:    
/////////// show com0
    lda setp_bak1
    sta setp
    adim setp,01h            
    ldi tbr,0eh
    lda setp
    call 07e0h
    sta seg13
////////////show com1    
    adim setp,01
    ldi tbr,0eh
    lda setp
    call 07e0h
    sta seg14
////////////show com2    
    adim setp,01    
    ldi tbr,0eh
    lda setp
    call 07e0h
    sta seg15
    lda setp
    sta setp_bak1
    rtni        
/////////////////////////////////////////
;lcd shine delay    
/////////////disp_lcd_delay/////////      
delay_ct:
    ldi ct0,05h   
////////key_delay///////    
delay:
    LDI delay_1,09H    ;1
    LDI delay_2,0EH    ;1
    SBIM delay_2,01H;1 2*15+1
    BC $-1        ;
    SBIM delay_1,01H;1
    bC $-4        ;1 4*(2*15+1)+1
    sbim ct0,01h    ;1 8*[4*(2*15+1)+1]+1
    bc $-7        ;1 
    RTNI        ;1 5*{8*[4*(2*15+1)+1]+1}
//// 显示数据表:根据LCD 的矩阵表定出数据表
//// 是按cb gda ef 来建立的    
    org 07f0h
    tjmp            //07f0h
    rtnw 1111b,0101b    //0//07f1h
    rtnw 1111b,0011b    //07f2h
    rtnw 1111b,0101b    //07f3h
    
    rtnw 1111b,0000b    //1
    rtnw 1111b,0000b
    rtnw 1111b,0101b
    
    rtnw 1111b,0100b    //2
    rtnw 1111b,0111b
    rtnw 1111b,0001b

    rtnw 1111b,0000b    //3
    rtnw 1111b,0111b //fa
    rtnw 1111b,0101b
    
    rtnw 1111b,0001b    //4
    rtnw 1111b,0100b
    rtnw 1111b,0101b //ff

    org 07e0h
    tjmp    
    rtnw 1110b,0001b    //5
    rtnw 1110b,0111b
    rtnw 1110b,0100b

    rtnw 1110b,0101b    //
    rtnw 1110b,0111b
    rtnw 1110b,0100b
    
    rtnw 1110b,0000b    //7
    rtnw 1110b,0001b
    rtnw 1110b,0101b
        
    rtnw 1110b,0101b    //8
    rtnw 1110b,0111b
    rtnw 1110b,0101b
    
    rtnw 1110b,0001b    //9
    rtnw 1110b,0111b
    rtnw 1110b,0101b//ff
    
;******************************
         
         
    END

使用特权

评论回复
7
warm_ice| | 2009-5-23 12:19 | 只看该作者

呵呵,恭喜

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

188

帖子

0

粉丝