Thông báo

Collapse
No announcement yet.

đồng hồ số hiển thị led 7 thanh

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Nguyên văn bởi pctcom Xem bài viết
    để kéo 4 led bạn cần phải mắc thêm 1 transistor npn với điện trở hạn dòng ở chân B của nó.
    em không hiểu???
    từ nguồn 5V vô chân dương của led và từ chân âm của led nối nối chân 7 của ds1307
    hay từ chân 7 ds1307 nối với chân dương của led và từ chân âm của led nối mass????

    Comment


    • Nhờ anh pctcom xem giúp em bài này với, em đã sửa chương trình để hiện thị tg trên lcd ma nó bị lỗi anh ah, a chỉ giúp em với
      http://www.4shared.com/file/5R2NBLvq..._dung_lcd.html

      Comment


      • Nguyên văn bởi luantinh Xem bài viết
        em không hiểu???
        từ nguồn 5V vô chân dương của led và từ chân âm của led nối nối chân 7 của ds1307
        hay từ chân 7 ds1307 nối với chân dương của led và từ chân âm của led nối mass????

        em làm như vậy đúng chưa?
        con npn sài c2383 hay c1015?
        Em cảm ơn

        Comment


        • Nguyên văn bởi luantinh Xem bài viết

          em làm như vậy đúng chưa?
          con npn sài c2383 hay c1015?
          Em cảm ơn
          Mạch như vậy là tốt rồi.

          Bạn lưu ý điện thế phân cực thuận của Led, tùy theo loại led mà điện thế của nó từ 2-3v
          nếu bạn sài loại lớn hơn 2,5v thì mắc nối tiếp theo cách của bạn có thể led sáng yếu. Thường thì led màu đỏ có điện thế thấp hơn 2,5v.

          Transistor npn không có C1015 nhe bạn, chính xác nó là C1815.
          PCT COMPUTER
          (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

          Comment


          • anh pctcom ơi cái hẹn giờ của em sao nó không chạy vậy?
            Anh giúp em với
            ;TIME CLOCK FOR AT89C51 AND 1307
            ;PROGRAMER :PCT
            ;PCTCOMPUTER - 0918227077
            $MOD51
            ;=====================================
            GIO_ALARM EQU 34H
            PHUT_ALARM EQU 35H
            GIAY_ALARM EQU 36H
            TEMP DATA 37H
            XUNG_NHAY DATA 38H ; XUNG 100ms
            BIEN_NHAY DATA 39H ;0 = SANG TAT CA DEN , 1 = NHAY led TUONG UNG KHI set
            GIAY DATA 40H
            PHUT DATA 41H
            GIO DATA 42H
            DONVI_GIAY DATA 47H
            CHUC_GIAY DATA 48H
            DONVI_PHUT DATA 49H
            CHUC_PHUT DATA 4AH
            DONVI_GIO DATA 4BH
            CHUC_GIO DATA 4CH
            PHAN_TRAM_GIAY DATA 4DH
            FLAG_SET DATA 4EH ;0 = KHONG SET , 1 = SET PHUT , 2 = SET GIO
            LED_GIAY BIT P2.0
            LED_C_GIAY BIT P2.1
            LED_PHUT BIT P2.2
            LED_C_PHUT BIT P2.3
            LED_GIO BIT P2.4
            LED_C_GIO BIT P2.5
            ;--------I2C-------
            SCL BIT P3.0
            SDA BIT P3.1
            SW_1 BIT P3.2
            SW_2 BIT P3.3
            SW_3 BIT P3.4
            LED_DATA EQU P0
            BYTE_W EQU 11010000B
            BYTE_R EQU 11010001B
            ADD_LOW EQU 62H
            DATA_DS EQU 63H
            ;=====================================
            ;=====================================
            ORG 00H
            LJMP MAIN
            ;===========================
            ;===========================
            ORG 0BH
            LJMP NGAT_TIME
            ;===========================
            ;===========================
            ORG 030H
            MAIN: ;reset tat ca cac bien
            MOV GIAY,#0
            MOV PHUT,#0
            MOV GIO,#0
            MOV BIEN_NHAY,#0
            MOV XUNG_NHAY,#0
            MOV FLAG_SET,#0
            MOV R0,#0
            MOV IE,#10001010B
            MOV TMOD,#11H
            MOV TL0,#LOW(-9216)
            MOV TH0,#HIGH(-9216)
            SETB TR0
            MOV A,#0FFH
            MOV LED_DATA,A
            MOV DPTR,#BANGSO
            CLR SCL
            CLR SDA
            NOP
            SETB SCL
            SETB SDA
            NOP
            MOV ADD_LOW,#00H
            MOV DATA_DS,#00H
            LCALL WRITE_BYTE
            ;==========

            ;==========
            SQW_CONTROL_1HZ:;dieu khien dau hai cham nhay theo giay
            MOV ADD_LOW,#07H ;dia chi Set SWQ
            MOV DATA_DS,#90H ; 1Hz
            LCALL WRITE_BYTE
            ;==========

            ;==========================================
            LOOP_HIEN_THI: ; chuong trinh chinh chay tai day
            ;==========================================
            MOV A,FLAG_SET
            CJNE A,#0,L_HT
            CALL INIT_PORT
            L_HT:
            LCALL HIEN_THI
            LCALL SCAN_KEY
            SJMP LOOP_HIEN_THI
            ;==========================================


            INIT_PORT:
            ;================================================= =READS SECONDS
            ;=================================================
            READ_SEC:
            MOV ADD_LOW,#00h
            LCALL READ_BYTE
            MOV A,DATA_DS
            CALL BCD_HEX
            MOV GIAY,A
            LCALL I2C_STOP
            ;================================================= =READS MINUTES
            MOV ADD_LOW,#01h
            LCALL READ_BYTE
            MOV A,DATA_DS
            CALL BCD_HEX
            MOV PHUT,A
            LCALL I2C_STOP
            ;================================================= =READS HOURS
            MOV ADD_LOW,#02h
            LCALL READ_BYTE
            MOV A,DATA_DS
            CALL BCD_HEX
            MOV GIO,A
            LCALL I2C_STOP
            RET
            ;================================================= =================================
            ;=====stop I2C communication
            I2C_Stop:
            CLR SDA
            SETB SCL
            NOP
            SETB SDA
            RET
            ;================================================= =================================
            ;************************************************* ****
            ;* WRITE DATA_DS TO DS1307 1 BYTE *
            ;* INPUT : ADD_LOW *
            ;* : DATA_DS *
            ;************************************************* ****
            WRITE_BYTE:
            CLR SDA ;start bit
            CLR SCL
            MOV A,#BYTE_W ;send control byte
            LCALL LOOP_BYTE
            SETB SDA
            SETB SCL
            JB SDA,WRITE_BYTE ;loop until busy
            CLR SCL
            MOV A,ADD_LOW ;send address low
            LCALL LOOP_BYTE
            SETB SDA
            SETB SCL
            JB SDA,WRITE_BYTE ;loop until busy
            CLR SCL
            MOV A,DATA_DS ;send DATA
            LCALL LOOP_BYTE
            SETB SDA
            SETB SCL
            JB SDA,WRITE_BYTE ;loop until busy
            CLR SDA
            CLR SCL
            SETB SCL ;stop bit
            SETB SDA
            RET
            ;==========================================
            BCD_HEX:
            ;==========================================
            MOV B,#10H
            DIV AB
            MOV TEMP,B ;CAT HANG DON VI
            MOV B,#10
            MUL AB
            ADD A,TEMP
            ret
            ;==========================================
            HEX_BCD:
            ;==========================================
            MOV B,#10
            DIV AB
            MOV TEMP,B ;CAT HANG DON VI
            MOV B,#10H
            MUL AB
            ADD A,TEMP
            ret
            ;==========================================
            ;************************************************* *****
            ;* READ DATA FROM DS1307 1 BYTE *
            ;* INPUT : ADD_HIGH *
            ;* : ADD_LOW *
            ;* OUTPUT : DATA_DS *
            ;************************************************* *****
            READ_BYTE:
            CLR SDA ;start bit
            CLR SCL
            MOV A,#BYTE_W ;send control byte
            LCALL LOOP_BYTE
            SETB SDA
            SETB SCL
            JB SDA,READ_BYTE ;loop until busy
            CLR SCL
            MOV A,ADD_LOW ;send address low
            LCALL LOOP_BYTE
            SETB SDA
            SETB SCL
            JB SDA,READ_BYTE ;loop until busy
            CLR SCL
            SETB SCL
            SETB SDA
            CLR SDA ;start bit
            CLR SCL
            MOV A,#BYTE_R ;send control byte
            LCALL LOOP_BYTE
            SETB SDA
            SETB SCL
            JB SDA,READ_BYTE ;loop until busy
            CLR SCL
            LCALL LOOP_READ
            SETB SDA
            SETB SCL
            CLR SCL
            SETB SCL ;stop bit
            SETB SDA
            RET

            ;************************************************* ***
            ;* WRITE *
            ;* INPUT: ACC *
            ;************************************************* ***
            LOOP_BYTE:
            PUSH 02H
            MOV R2,#08H
            LOOP_SEND:
            RLC A
            MOV SDA,C
            SETB SCL
            CLR SCL
            DJNZ R2,LOOP_SEND
            POP 02H
            RET
            ;************************************************* ****
            ;* READ *
            ;* OUTPUT: ACC *
            ;************************************************* ****
            LOOP_READ:
            PUSH 02H
            MOV R2,#08H
            LOOP_READ1:
            SETB SCL
            MOV C,SDA
            CLR SCL
            RLC A
            DJNZ R2,LOOP_READ1
            MOV DATA_DS,A
            POP 02H
            RET
            ;==========================================
            TACHSO: ; tach rieng hang chuc va hang don vi bang cach chia cho 10
            ;==========================================
            MOV A,GIAY ;Lan luot chia cac Bien: Giay, Phut, Gio cho 10
            MOV B,#10 ;de tach phan Don Vi va Hang Chuc ra, de cat rieng vao cac Bien tuong ung.
            DIV AB ;PHAN NGUYEN trong A, PHAN DU trong B
            MOV CHUC_GIAY,A ;Luu lai HANG CHUC Giay
            MOV DONVI_GIAY,B ;luu lai DON VI Giay
            ;==========
            MOV A,PHUT
            MOV B,#10
            DIV AB
            MOV CHUC_PHUT,A
            MOV DONVI_PHUT,B
            ;==========
            MOV A,GIO
            MOV B,#10
            DIV AB
            MOV CHUC_GIO,A
            MOV DONVI_GIO,B
            RET
            ;========================================
            HIEN_THI: ; HIEN THI LED 7 DOAN
            ;========================================
            MOV A,FLAG_SET
            CJNE A,#0,CHOP_NHAY
            LCALL HIENTHI
            AJMP THOAT_HIENTHI
            ;========================================
            CHOP_NHAY: ; KIEM TRA BIEN NHAY VA FLAG_SET DE TAO HIEU UNG NHAY LED DANG SETING
            ;=================================
            MOV A,BIEN_NHAY
            CJNE A,#0,CHOP_NHAY1
            LCALL HIENTHI
            AJMP THOAT_HIENTHI
            CHOP_NHAY1:
            LCALL NHAY
            JMP CHOP_NHAY
            THOAT_HIENTHI:
            RET
            ;=================================
            HIENTHI:
            ;=================================
            LCALL HIENTHI_S
            LCALL HIENTHI_P
            LCALL HIENTHI_G
            RET
            ;=================================
            NHAY:
            ;=================================
            MOV A,FLAG_SET
            CJNE A,#1,KT1
            LCALL HIENTHI_S
            LCALL HIENTHI_G
            KT1:
            MOV A,FLAG_SET
            CJNE A,#2,KT2
            LCALL HIENTHI_S
            LCALL HIENTHI_P
            KT2:
            MOV A,FLAG_SET
            CJNE A,#3,KT3
            LCALL HIENTHI_G_ALARM
            KT3:
            MOV A,FLAG_SET
            CJNE A,#4,THOAT_N
            LCALL HIENTHI_P_ALARM
            THOAT_N:
            RET
            ;=================================
            HIENTHI_S:
            ;=================================
            ;hien thi hang don vi cua Giay
            MOV A,DONVI_GIAY
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_GIAY
            LCALL DL
            SETB LED_GIAY
            ;==========
            MOV A,CHUC_GIAY ;hien thi hang chuc cua Giay
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_C_GIAY
            LCALL DL
            SETB LED_C_GIAY
            RET
            ;=================================
            HIENTHI_P:
            ;=================================
            MOV A,DONVI_PHUT ;hien thi hang don vi cua Phut
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_PHUT
            LCALL DL
            SETB LED_PHUT
            ;============
            MOV A,CHUC_PHUT ;hien thi hang chuc cua Phut
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_C_PHUT
            LCALL DL
            SETB LED_C_PHUT
            RET
            ;=================================
            HIENTHI_G:
            ;=================================
            MOV A,DONVI_GIO ;hien thi hang don vi cua gio
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_GIO
            LCALL DL
            SETB LED_GIO
            ;============
            MOV A,CHUC_GIO ;hien thi hang chuc cua Gio
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_C_GIO
            LCALL DL
            SETB LED_C_GIO
            RET
            ;=================================
            HIENTHI_P_ALARM:
            ;=================================
            MOV A,DONVI_PHUT
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_PHUT
            LCALL DL
            SETB LED_PHUT
            ;============
            MOV A,CHUC_PHUT
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_C_PHUT
            LCALL DL
            SETB LED_C_PHUT
            RET
            ;=================================
            HIENTHI_G_ALARM:
            ;=================================
            MOV A,DONVI_GIO
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_GIO
            LCALL DL
            SETB LED_GIO
            ;============
            MOV A,CHUC_GIO
            MOVC A,@A+DPTR
            MOV LED_DATA,A
            CLR LED_C_GIO
            LCALL DL
            SETB LED_C_GIO
            RET
            ;=================================
            NGAT_TIME:
            ;=================================
            INC XUNG_NHAY
            INC PHAN_TRAM_GIAY ;DAT TIMER CHAY 1/100 GIAY
            MOV TL0,#LOW(-9216)
            MOV TH0,#HIGH(-9216)
            SETB TR0
            ;===============
            PUSH ACC
            PUSH PSW ;Thanh ghi trang thái chuong trình
            ;==========
            MOV A,XUNG_NHAY ;TAO XUNG NHAP NHAY = 1/4 GIAY
            CJNE A,#25,TIME1
            MOV XUNG_NHAY,#0
            INC BIEN_NHAY
            MOV A,BIEN_NHAY
            CJNE A,#3,TIME1
            MOV BIEN_NHAY,#0
            ;==========
            TIME1:
            MOV A,PHAN_TRAM_GIAY ;Kiem tra bien PHAN_TRAM_GIAY - Thoat khoi ngat Time0 neu khong =
            CJNE A,#100,THOAT_NGAT_TIME
            MOV PHAN_TRAM_GIAY,#0 ;Neu = 100 thì set bien nay = 0
            ;===============
            THOAT_NGAT_TIME:
            LCALL TACHSO
            POP PSW
            POP ACC
            RETI
            ;==================================
            SCAN_KEY: ;KIEM TRA PHIM NHAN
            ;==================================
            SW1: ;SET TIME
            JB SW_1,SW2
            INC FLAG_SET
            MOV A,FLAG_SET
            CJNE A,#3,L_SW1
            ;==========
            MOV A,PHUT
            CALL HEX_BCD
            MOV DATA_DS,A
            MOV ADD_LOW,#01H
            LCALL WRITE_BYTE
            ;==========
            MOV A,GIO
            CALL HEX_BCD
            MOV DATA_DS,A
            MOV ADD_LOW,#02H
            LCALL WRITE_BYTE

            MOV FLAG_SET,#0
            L_SW1:
            LCALL DL1
            LCALL DL1
            LCALL DL1
            LCALL DL1
            LJMP NOKEY
            ;===============
            SW2: ;SET_MIN
            JB SW_2,SW3
            MOV A,FLAG_SET
            CJNE A,#0,SW20
            LJMP NOKEY
            SW20:
            MOV A,FLAG_SET
            CJNE A,#1,TANG_GIO ;
            JB SW_2,SW3
            ;===============
            TANG_PHUT:
            INC PHUT ;Roi tang Bien phut them 1
            MOV A,PHUT
            CJNE A,#60,L_SW2 ;
            MOV PHUT,#0 ;Neu = 60 thì set bien nay = 0
            L_SW2:
            LCALL DL1
            LCALL DL1
            LJMP SW2
            ;===============
            TANG_GIO: ;SET HOUR
            JB SW_2,SW3
            MOV A,FLAG_SET
            CJNE A,#2,SW3
            JB SW_2,SW3
            INC GIO ;Roi tang Bien Gio them 1
            MOV A,GIO
            CJNE A,#24,L_TANG_GIO ;Bien gio = 60? - Thoat khoi ngat Time0 neu khong =
            MOV GIO,#0
            L_TANG_GIO:
            LCALL DL1
            LCALL DL1
            LJMP TANG_GIO
            ;==============================
            SW3: ;DANG NHAN SW3?
            JB SW_3,NOKEY ;KHONG NHAN SW2? KIEM TRA SW3
            MOV A,FLAG_SET
            CJNE A,#0,SW30
            LJMP NOKEY
            SW30:
            MOV A,FLAG_SET ;DANG NHAN SW2. KIEM TRA CHE DO CHINH GIO HAY CHINH PHUT.
            CJNE A,#1,GIAM_GIO ;
            JB SW_3,NOKEY
            ;===============
            GIAM_PHUT:
            DEC PHUT ;Roi tang Bien phut them 1
            MOV A,PHUT
            CJNE A,#-1,L_SW3 ;Bien Phut = -1? - Thoat khoi ngat Time0 neu khong =
            MOV PHUT,#59 ;Neu = -1 thì set bien nay = 60
            L_SW3:
            LCALL DL1
            LCALL DL1
            LJMP SW3
            ;===============
            GIAM_GIO:
            ;===============
            JB SW_3,NOKEY
            MOV A,FLAG_SET
            CJNE A,#2,NOKEY

            LCALL HIENTHI
            JB SW_3,NOKEY
            DEC GIO ;Roi Giam Bien Gio them 1
            MOV A,GIO
            CJNE A,#-1,L_GIAM_GIO ;Bien gio = -1? - Thoat khoi ngat Time0 neu khong =
            MOV GIO,#23
            L_GIAM_GIO:
            LCALL DL1
            LCALL DL1
            LJMP GIAM_GIO
            ;===============
            NOKEY:
            RET
            ;=================================
            DL:
            ;=================================
            MOV R7,#200
            DJNZ R7,$
            RET
            ;==================
            DL1:
            ;==================
            PUSH 00H
            PUSH 01H
            MOV R1,#20O
            DEL:
            LCALL HIEN_THI
            LCALL HIEN_THI
            LCALL HIEN_THI
            MOV R0,#250
            DJNZ R0,$
            DJNZ R1,DEL
            POP 01H
            POP 00H
            RET
            ;===================
            DELAY_1MS:
            ;===================
            MOV R7,#200
            DL_1MS_1:
            MOV R6,#200
            DJNZ R6,$
            DJNZ R7,DL_1MS_1
            RET
            ;====================
            DELAY:
            ;====================
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            NOP
            RET
            ;=================================
            BANGSO:
            ;=================================
            DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
            RET
            END

            Anh giúp em với!!!
            Em cảm ơn

            Comment


            • anh pctcom oi, giúp em với, a kiểm tra giúp em chương trình bị lỗi ở chỗ nào mà nó chạy bi chậm như vậy anh, em có gửi file mô phỏng đây http://www.4shared.com/file/5R2NBLvq..._dung_lcd.html
              nhờ anh giúp em với

              Comment


              • Anh PCTcom ơi
                Giúp em phần hẹn giờ đi...
                Thật lòng em viết hoài mà không thấy chạy.
                Em bó tay rồi...

                Comment


                • anh PCTCOM ơi em làm mach thực tế nhưng sao nó không chạy vậy???

                  Comment


                  • sao không gọi đến số này để hỏi nhỉ 0918227077 số này ghi trong phần code có lẽ là của tác giả

                    Comment


                    • Nguyên văn bởi nguoianhxam Xem bài viết
                      anh pctcom ơi cái hẹn giờ của em sao nó không chạy vậy?
                      Anh giúp em với
                      ;TIME CLOCK FOR AT89C51 AND 1307
                      ;PROGRAMER :PCT
                      ;PCTCOMPUTER - 0918227077
                      $MOD51
                      ;=====================================
                      GIO_ALARM EQU 34H
                      PHUT_ALARM EQU 35H
                      GIAY_ALARM EQU 36H
                      TEMP DATA 37H
                      XUNG_NHAY DATA 38H ; XUNG 100ms
                      BIEN_NHAY DATA 39H ;0 = SANG TAT CA DEN , 1 = NHAY led TUONG UNG KHI set
                      GIAY DATA 40H
                      PHUT DATA 41H
                      GIO DATA 42H
                      DONVI_GIAY DATA 47H
                      CHUC_GIAY DATA 48H
                      DONVI_PHUT DATA 49H
                      CHUC_PHUT DATA 4AH
                      DONVI_GIO DATA 4BH
                      CHUC_GIO DATA 4CH
                      PHAN_TRAM_GIAY DATA 4DH
                      FLAG_SET DATA 4EH ;0 = KHONG SET , 1 = SET PHUT , 2 = SET GIO
                      LED_GIAY BIT P2.0
                      LED_C_GIAY BIT P2.1
                      LED_PHUT BIT P2.2
                      LED_C_PHUT BIT P2.3
                      LED_GIO BIT P2.4
                      LED_C_GIO BIT P2.5
                      ;--------I2C-------
                      SCL BIT P3.0
                      SDA BIT P3.1
                      SW_1 BIT P3.2
                      SW_2 BIT P3.3
                      SW_3 BIT P3.4
                      LED_DATA EQU P0
                      BYTE_W EQU 11010000B
                      BYTE_R EQU 11010001B
                      ADD_LOW EQU 62H
                      DATA_DS EQU 63H
                      ;=====================================
                      ;=====================================
                      ORG 00H
                      LJMP MAIN
                      ;===========================
                      ;===========================
                      ORG 0BH
                      LJMP NGAT_TIME
                      ;===========================
                      ;===========================
                      ORG 030H
                      MAIN: ;reset tat ca cac bien
                      MOV GIAY,#0
                      MOV PHUT,#0
                      MOV GIO,#0
                      MOV BIEN_NHAY,#0
                      MOV XUNG_NHAY,#0
                      MOV FLAG_SET,#0
                      MOV R0,#0
                      MOV IE,#10001010B
                      MOV TMOD,#11H
                      MOV TL0,#LOW(-9216)
                      MOV TH0,#HIGH(-9216)
                      SETB TR0
                      MOV A,#0FFH
                      MOV LED_DATA,A
                      MOV DPTR,#BANGSO
                      CLR SCL
                      CLR SDA
                      NOP
                      SETB SCL
                      SETB SDA
                      NOP
                      MOV ADD_LOW,#00H
                      MOV DATA_DS,#00H
                      LCALL WRITE_BYTE
                      ;==========

                      ;==========
                      SQW_CONTROL_1HZ:;dieu khien dau hai cham nhay theo giay
                      MOV ADD_LOW,#07H ;dia chi Set SWQ
                      MOV DATA_DS,#90H ; 1Hz
                      LCALL WRITE_BYTE
                      ;==========

                      ;==========================================
                      LOOP_HIEN_THI: ; chuong trinh chinh chay tai day
                      ;==========================================
                      MOV A,FLAG_SET
                      CJNE A,#0,L_HT
                      CALL INIT_PORT
                      L_HT:
                      LCALL HIEN_THI
                      LCALL SCAN_KEY
                      SJMP LOOP_HIEN_THI
                      ;==========================================


                      INIT_PORT:
                      ;================================================= =READS SECONDS
                      ;=================================================
                      READ_SEC:
                      MOV ADD_LOW,#00h
                      LCALL READ_BYTE
                      MOV A,DATA_DS
                      CALL BCD_HEX
                      MOV GIAY,A
                      LCALL I2C_STOP
                      ;================================================= =READS MINUTES
                      MOV ADD_LOW,#01h
                      LCALL READ_BYTE
                      MOV A,DATA_DS
                      CALL BCD_HEX
                      MOV PHUT,A
                      LCALL I2C_STOP
                      ;================================================= =READS HOURS
                      MOV ADD_LOW,#02h
                      LCALL READ_BYTE
                      MOV A,DATA_DS
                      CALL BCD_HEX
                      MOV GIO,A
                      LCALL I2C_STOP
                      RET
                      ;================================================= =================================
                      ;=====stop I2C communication
                      I2C_Stop:
                      CLR SDA
                      SETB SCL
                      NOP
                      SETB SDA
                      RET
                      ;================================================= =================================
                      ;************************************************* ****
                      ;* WRITE DATA_DS TO DS1307 1 BYTE *
                      ;* INPUT : ADD_LOW *
                      ;* : DATA_DS *
                      ;************************************************* ****
                      WRITE_BYTE:
                      CLR SDA ;start bit
                      CLR SCL
                      MOV A,#BYTE_W ;send control byte
                      LCALL LOOP_BYTE
                      SETB SDA
                      SETB SCL
                      JB SDA,WRITE_BYTE ;loop until busy
                      CLR SCL
                      MOV A,ADD_LOW ;send address low
                      LCALL LOOP_BYTE
                      SETB SDA
                      SETB SCL
                      JB SDA,WRITE_BYTE ;loop until busy
                      CLR SCL
                      MOV A,DATA_DS ;send DATA
                      LCALL LOOP_BYTE
                      SETB SDA
                      SETB SCL
                      JB SDA,WRITE_BYTE ;loop until busy
                      CLR SDA
                      CLR SCL
                      SETB SCL ;stop bit
                      SETB SDA
                      RET
                      ;==========================================
                      BCD_HEX:
                      ;==========================================
                      MOV B,#10H
                      DIV AB
                      MOV TEMP,B ;CAT HANG DON VI
                      MOV B,#10
                      MUL AB
                      ADD A,TEMP
                      ret
                      ;==========================================
                      HEX_BCD:
                      ;==========================================
                      MOV B,#10
                      DIV AB
                      MOV TEMP,B ;CAT HANG DON VI
                      MOV B,#10H
                      MUL AB
                      ADD A,TEMP
                      ret
                      ;==========================================
                      ;************************************************* *****
                      ;* READ DATA FROM DS1307 1 BYTE *
                      ;* INPUT : ADD_HIGH *
                      ;* : ADD_LOW *
                      ;* OUTPUT : DATA_DS *
                      ;************************************************* *****
                      READ_BYTE:
                      CLR SDA ;start bit
                      CLR SCL
                      MOV A,#BYTE_W ;send control byte
                      LCALL LOOP_BYTE
                      SETB SDA
                      SETB SCL
                      JB SDA,READ_BYTE ;loop until busy
                      CLR SCL
                      MOV A,ADD_LOW ;send address low
                      LCALL LOOP_BYTE
                      SETB SDA
                      SETB SCL
                      JB SDA,READ_BYTE ;loop until busy
                      CLR SCL
                      SETB SCL
                      SETB SDA
                      CLR SDA ;start bit
                      CLR SCL
                      MOV A,#BYTE_R ;send control byte
                      LCALL LOOP_BYTE
                      SETB SDA
                      SETB SCL
                      JB SDA,READ_BYTE ;loop until busy
                      CLR SCL
                      LCALL LOOP_READ
                      SETB SDA
                      SETB SCL
                      CLR SCL
                      SETB SCL ;stop bit
                      SETB SDA
                      RET

                      ;************************************************* ***
                      ;* WRITE *
                      ;* INPUT: ACC *
                      ;************************************************* ***
                      LOOP_BYTE:
                      PUSH 02H
                      MOV R2,#08H
                      LOOP_SEND:
                      RLC A
                      MOV SDA,C
                      SETB SCL
                      CLR SCL
                      DJNZ R2,LOOP_SEND
                      POP 02H
                      RET
                      ;************************************************* ****
                      ;* READ *
                      ;* OUTPUT: ACC *
                      ;************************************************* ****
                      LOOP_READ:
                      PUSH 02H
                      MOV R2,#08H
                      LOOP_READ1:
                      SETB SCL
                      MOV C,SDA
                      CLR SCL
                      RLC A
                      DJNZ R2,LOOP_READ1
                      MOV DATA_DS,A
                      POP 02H
                      RET
                      ;==========================================
                      TACHSO: ; tach rieng hang chuc va hang don vi bang cach chia cho 10
                      ;==========================================
                      MOV A,GIAY ;Lan luot chia cac Bien: Giay, Phut, Gio cho 10
                      MOV B,#10 ;de tach phan Don Vi va Hang Chuc ra, de cat rieng vao cac Bien tuong ung.
                      DIV AB ;PHAN NGUYEN trong A, PHAN DU trong B
                      MOV CHUC_GIAY,A ;Luu lai HANG CHUC Giay
                      MOV DONVI_GIAY,B ;luu lai DON VI Giay
                      ;==========
                      MOV A,PHUT
                      MOV B,#10
                      DIV AB
                      MOV CHUC_PHUT,A
                      MOV DONVI_PHUT,B
                      ;==========
                      MOV A,GIO
                      MOV B,#10
                      DIV AB
                      MOV CHUC_GIO,A
                      MOV DONVI_GIO,B
                      RET
                      ;========================================
                      HIEN_THI: ; HIEN THI LED 7 DOAN
                      ;========================================
                      MOV A,FLAG_SET
                      CJNE A,#0,CHOP_NHAY
                      LCALL HIENTHI
                      AJMP THOAT_HIENTHI
                      ;========================================
                      CHOP_NHAY: ; KIEM TRA BIEN NHAY VA FLAG_SET DE TAO HIEU UNG NHAY LED DANG SETING
                      ;=================================
                      MOV A,BIEN_NHAY
                      CJNE A,#0,CHOP_NHAY1
                      LCALL HIENTHI
                      AJMP THOAT_HIENTHI
                      CHOP_NHAY1:
                      LCALL NHAY
                      JMP CHOP_NHAY
                      THOAT_HIENTHI:
                      RET
                      ;=================================
                      HIENTHI:
                      ;=================================
                      LCALL HIENTHI_S
                      LCALL HIENTHI_P
                      LCALL HIENTHI_G
                      RET
                      ;=================================
                      NHAY:
                      ;=================================
                      MOV A,FLAG_SET
                      CJNE A,#1,KT1
                      LCALL HIENTHI_S
                      LCALL HIENTHI_G
                      KT1:
                      MOV A,FLAG_SET
                      CJNE A,#2,KT2
                      LCALL HIENTHI_S
                      LCALL HIENTHI_P
                      KT2:
                      MOV A,FLAG_SET
                      CJNE A,#3,KT3
                      LCALL HIENTHI_G_ALARM
                      KT3:
                      MOV A,FLAG_SET
                      CJNE A,#4,THOAT_N
                      LCALL HIENTHI_P_ALARM
                      THOAT_N:
                      RET
                      ;=================================
                      HIENTHI_S:
                      ;=================================
                      ;hien thi hang don vi cua Giay
                      MOV A,DONVI_GIAY
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_GIAY
                      LCALL DL
                      SETB LED_GIAY
                      ;==========
                      MOV A,CHUC_GIAY ;hien thi hang chuc cua Giay
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_C_GIAY
                      LCALL DL
                      SETB LED_C_GIAY
                      RET
                      ;=================================
                      HIENTHI_P:
                      ;=================================
                      MOV A,DONVI_PHUT ;hien thi hang don vi cua Phut
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_PHUT
                      LCALL DL
                      SETB LED_PHUT
                      ;============
                      MOV A,CHUC_PHUT ;hien thi hang chuc cua Phut
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_C_PHUT
                      LCALL DL
                      SETB LED_C_PHUT
                      RET
                      ;=================================
                      HIENTHI_G:
                      ;=================================
                      MOV A,DONVI_GIO ;hien thi hang don vi cua gio
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_GIO
                      LCALL DL
                      SETB LED_GIO
                      ;============
                      MOV A,CHUC_GIO ;hien thi hang chuc cua Gio
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_C_GIO
                      LCALL DL
                      SETB LED_C_GIO
                      RET
                      ;=================================
                      HIENTHI_P_ALARM:
                      ;=================================
                      MOV A,DONVI_PHUT
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_PHUT
                      LCALL DL
                      SETB LED_PHUT
                      ;============
                      MOV A,CHUC_PHUT
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_C_PHUT
                      LCALL DL
                      SETB LED_C_PHUT
                      RET
                      ;=================================
                      HIENTHI_G_ALARM:
                      ;=================================
                      MOV A,DONVI_GIO
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_GIO
                      LCALL DL
                      SETB LED_GIO
                      ;============
                      MOV A,CHUC_GIO
                      MOVC A,@A+DPTR
                      MOV LED_DATA,A
                      CLR LED_C_GIO
                      LCALL DL
                      SETB LED_C_GIO
                      RET
                      ;=================================
                      NGAT_TIME:
                      ;=================================
                      INC XUNG_NHAY
                      INC PHAN_TRAM_GIAY ;DAT TIMER CHAY 1/100 GIAY
                      MOV TL0,#LOW(-9216)
                      MOV TH0,#HIGH(-9216)
                      SETB TR0
                      ;===============
                      PUSH ACC
                      PUSH PSW ;Thanh ghi trang thái chuong trình
                      ;==========
                      MOV A,XUNG_NHAY ;TAO XUNG NHAP NHAY = 1/4 GIAY
                      CJNE A,#25,TIME1
                      MOV XUNG_NHAY,#0
                      INC BIEN_NHAY
                      MOV A,BIEN_NHAY
                      CJNE A,#3,TIME1
                      MOV BIEN_NHAY,#0
                      ;==========
                      TIME1:
                      MOV A,PHAN_TRAM_GIAY ;Kiem tra bien PHAN_TRAM_GIAY - Thoat khoi ngat Time0 neu khong =
                      CJNE A,#100,THOAT_NGAT_TIME
                      MOV PHAN_TRAM_GIAY,#0 ;Neu = 100 thì set bien nay = 0
                      ;===============
                      THOAT_NGAT_TIME:
                      LCALL TACHSO
                      POP PSW
                      POP ACC
                      RETI
                      ;==================================
                      SCAN_KEY: ;KIEM TRA PHIM NHAN
                      ;==================================
                      SW1: ;SET TIME
                      JB SW_1,SW2
                      INC FLAG_SET
                      MOV A,FLAG_SET
                      CJNE A,#3,L_SW1
                      ;==========
                      MOV A,PHUT
                      CALL HEX_BCD
                      MOV DATA_DS,A
                      MOV ADD_LOW,#01H
                      LCALL WRITE_BYTE
                      ;==========
                      MOV A,GIO
                      CALL HEX_BCD
                      MOV DATA_DS,A
                      MOV ADD_LOW,#02H
                      LCALL WRITE_BYTE

                      MOV FLAG_SET,#0
                      L_SW1:
                      LCALL DL1
                      LCALL DL1
                      LCALL DL1
                      LCALL DL1
                      LJMP NOKEY
                      ;===============
                      SW2: ;SET_MIN
                      JB SW_2,SW3
                      MOV A,FLAG_SET
                      CJNE A,#0,SW20
                      LJMP NOKEY
                      SW20:
                      MOV A,FLAG_SET
                      CJNE A,#1,TANG_GIO ;
                      JB SW_2,SW3
                      ;===============
                      TANG_PHUT:
                      INC PHUT ;Roi tang Bien phut them 1
                      MOV A,PHUT
                      CJNE A,#60,L_SW2 ;
                      MOV PHUT,#0 ;Neu = 60 thì set bien nay = 0
                      L_SW2:
                      LCALL DL1
                      LCALL DL1
                      LJMP SW2
                      ;===============
                      TANG_GIO: ;SET HOUR
                      JB SW_2,SW3
                      MOV A,FLAG_SET
                      CJNE A,#2,SW3
                      JB SW_2,SW3
                      INC GIO ;Roi tang Bien Gio them 1
                      MOV A,GIO
                      CJNE A,#24,L_TANG_GIO ;Bien gio = 60? - Thoat khoi ngat Time0 neu khong =
                      MOV GIO,#0
                      L_TANG_GIO:
                      LCALL DL1
                      LCALL DL1
                      LJMP TANG_GIO
                      ;==============================
                      SW3: ;DANG NHAN SW3?
                      JB SW_3,NOKEY ;KHONG NHAN SW2? KIEM TRA SW3
                      MOV A,FLAG_SET
                      CJNE A,#0,SW30
                      LJMP NOKEY
                      SW30:
                      MOV A,FLAG_SET ;DANG NHAN SW2. KIEM TRA CHE DO CHINH GIO HAY CHINH PHUT.
                      CJNE A,#1,GIAM_GIO ;
                      JB SW_3,NOKEY
                      ;===============
                      GIAM_PHUT:
                      DEC PHUT ;Roi tang Bien phut them 1
                      MOV A,PHUT
                      CJNE A,#-1,L_SW3 ;Bien Phut = -1? - Thoat khoi ngat Time0 neu khong =
                      MOV PHUT,#59 ;Neu = -1 thì set bien nay = 60
                      L_SW3:
                      LCALL DL1
                      LCALL DL1
                      LJMP SW3
                      ;===============
                      GIAM_GIO:
                      ;===============
                      JB SW_3,NOKEY
                      MOV A,FLAG_SET
                      CJNE A,#2,NOKEY

                      LCALL HIENTHI
                      JB SW_3,NOKEY
                      DEC GIO ;Roi Giam Bien Gio them 1
                      MOV A,GIO
                      CJNE A,#-1,L_GIAM_GIO ;Bien gio = -1? - Thoat khoi ngat Time0 neu khong =
                      MOV GIO,#23
                      L_GIAM_GIO:
                      LCALL DL1
                      LCALL DL1
                      LJMP GIAM_GIO
                      ;===============
                      NOKEY:
                      RET
                      ;=================================
                      DL:
                      ;=================================
                      MOV R7,#200
                      DJNZ R7,$
                      RET
                      ;==================
                      DL1:
                      ;==================
                      PUSH 00H
                      PUSH 01H
                      MOV R1,#20O
                      DEL:
                      LCALL HIEN_THI
                      LCALL HIEN_THI
                      LCALL HIEN_THI
                      MOV R0,#250
                      DJNZ R0,$
                      DJNZ R1,DEL
                      POP 01H
                      POP 00H
                      RET
                      ;===================
                      DELAY_1MS:
                      ;===================
                      MOV R7,#200
                      DL_1MS_1:
                      MOV R6,#200
                      DJNZ R6,$
                      DJNZ R7,DL_1MS_1
                      RET
                      ;====================
                      DELAY:
                      ;====================
                      NOP
                      NOP
                      NOP
                      NOP
                      NOP
                      NOP
                      NOP
                      NOP
                      RET
                      ;=================================
                      BANGSO:
                      ;=================================
                      DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
                      RET
                      END

                      Anh giúp em với!!!
                      Em cảm ơn

                      Để viết phần Alarm bạn cần xử lý các phần sau đây:

                      - Trong phần ScanKey bạn viết thêm phần nhập H,M,S Alarm. Tương tự như code trên bạn sẽ tăng hoặc giảm giá trị của nó bằng phím Up-Down. Để phần Alarm mà bạn nhập không mất khi mạch mất điện bạn cần cất các biến mới set vào Ram của Ds1307 (08H - 3FH)

                      - Để phục hồi giá trị Alarm bạn đã set trước sau khi bị mất điện hoặc Reset, ở phần đầu CT bạn viết code đọc giá trị Alarm mà bạn đã cất vào Ram Ds1307.

                      - Quan trọng nhất là trong vòng lặp chính của CT (Main Loop) Bạn phải có đoạn code so sánh các giá trị H, M, S của giờ hiện tại và giờ Alarm, nếu giá trị này trùng nhau thì cho chạy đoạn code báo Alarm.
                      PCT COMPUTER
                      (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

                      Comment


                      • Nguyên văn bởi luantinh Xem bài viết
                        anh PCTCOM ơi em làm mach thực tế nhưng sao nó không chạy vậy???
                        Bạn cần nói rõ là bị lỗi ra sao?

                        Trước tiên bạn phải chắc chắn là mạch của bạn đã được làm đúng, bằng cách viết 1 ct đơn giản để test phần hiển thị, phần phím nhấn. Cuối cùng nếu tất cả đã ok thì bạn hãy cho chạy CT có code cho DS1307.
                        PCT COMPUTER
                        (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

                        Comment


                        • nhờ anh ptccom bớt chút thời gian xem hộ em bài này tí ạ. e cảm ơn anh
                          http://www.4shared.com/file/5R2NBLvq..._dung_lcd.html

                          Comment


                          • Nguyên văn bởi conandoly Xem bài viết
                            nhờ anh ptccom bớt chút thời gian xem hộ em bài này tí ạ. e cảm ơn anh
                            http://www.4shared.com/file/5R2NBLvq..._dung_lcd.html
                            - Code của bạn lỗi phần hiển thị, (Bạn không thể copy y chang phần hiển thị 7seg bằng LCD), trong code hiển thị 7seg còn có thêm giải thuật chống nhấp nháy led ( phải quét led liên tục). Ngược lại trong code hiển thị LCD chỉ cần tốc độ làm tươi khoảng 1/10s là ok. Code của bạn có tốc độ làm tươi LCD quá nhanh làm cho phần mềm giả lập phải chạy hết CX nên gây ra tình trạng chạy chậm như bạn đã thấy. Bạn có thể tạm thời giảm tần số dao động thạch anh trong mạch giả lập từ 12MHz xuống 1MHz thử xem?

                            - Trong phần hiển thị LCD bạn còn thiếu phần chuyển đổi từ BCD to HEX.
                            Last edited by pctcom; 09-12-2010, 10:36.
                            PCT COMPUTER
                            (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

                            Comment


                            • cảm ơn anh pctcom đã cho ý kiến, nhưng em có 1 số thắc mắc muốn hỏi anh:
                              tốc độ làm tươi lcd mà anh nói nghĩa là gì ạ?
                              và trong code của em co phần tách số là em định chuyển mã bcd sang mã ascii để xuất ra lcd, theo anh nếu chuyển bcd sang ma hẽ thì có thể xuất ra lcd được ko ạ?
                              e cũng mới hoc vdk ma chủ yếu là tự tìm hiểu nên có nhiều cái e chưa hiểu sâu lắm, nếu có thể a có thể bớt chút thời gian sưa code lại cho e tham khảo tí được ko ạ?
                              e cảm ơn anh nhiều

                              Comment


                              • Nguyên văn bởi pctcom Xem bài viết
                                Bạn cần nói rõ là bị lỗi ra sao?

                                Trước tiên bạn phải chắc chắn là mạch của bạn đã được làm đúng, bằng cách viết 1 ct đơn giản để test phần hiển thị, phần phím nhấn. Cuối cùng nếu tất cả đã ok thì bạn hãy cho chạy CT có code cho DS1307.
                                Em vẽ đúng mà anh coi hình em thử. Em vẽ bên orcad.Em không nối chân P0.7 vào các dấu chấm trên 6 led 7 đoạn ( vì em thấy dấu chấm không dùng đến)

                                em xài Led 7 đoạn loại lớn (29x40mm)
                                Cái mạch em chia làm 2 khối: khối điều khiển và khối hiển thị.

                                Vì em sài led 7 đoạn loại lớn (29x40mm) nên anh cho em hỏi là "cái điện trở dãy 10K gắn vào P0 và 6 con điện trở 4.7K gắn từ P2 vào 6 con Transistor A1015" Có nên thay đổi giá trị khác không?? và nếu có thay đổi thì anh cho em hỏi mình nên dùng giá trị bao nhiêu???

                                Còn nữa anh cho em hỏi "2 con điện trở 10K nối từ nguồn +5VDC xuống 2 chân P3.0,P3.1 và SCL,SDA" nó có tác dụng gì vậy anh??? Mình không gắn vô có sao không anh???

                                Em cám ơn
                                đây là file DHS.zip
                                http://www.mediafire.com/?j1mv1y5ukro571r
                                Last edited by luantinh; 10-12-2010, 15:23.

                                Comment

                                Về tác giả

                                Collapse

                                miehaui Tìm hiểu thêm về miehaui

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X