Thông báo

Collapse
No announcement yet.

[Share-code] Mỗi ngày một bài tập về AT89S52

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

  • Nguyên văn bởi hanhkt1993
    Anh ơi đây là 1 chương trình c0n asm ( e k biết gì về lập trình cả mog a giúp e)
    CHIP3:;SANG DAN VONG

    MOV A,#0FFH
    LAPC:
    CLR C
    RRC A
    CALL DELAY
    MOV P0,A
    CJNE A,#00H,LAPC

    MOV A,#0FFH
    LAPC1:
    CLR C
    RRC A
    CALL DELAY
    MOV P2,A
    CJNE A,#00H,LAPC1

    MOV A,#0FFH
    LAPC2:
    CLR C
    RRC A
    CALL DELAY
    MOV P3,A
    CJNE A,#00H,LAPC2

    MOV A,#0FFH
    LAPC3:
    CLR C
    RRC A
    CALL DELAY
    MOV P1,A
    CJNE A,#00H,LAPC3
    RET
    theo e tìm hiểu thì led sẽ sáng dần từ trên port0 xuống port3 đồng thời sáng dần từ port2 lên port1 đúng k vậy anh?
    Nhưng nếu chỉ cho port3 và port1 sáng dần thì xem xoá port0 và port2 nthế đúng k? (xoá MOV A,#0FFH
    LAPC:
    CLR C
    RRC A
    CALL DELAY
    MOV P0,A
    CJNE A,#00H,LAPC

    MOV A,#0FFH
    LAPC1:
    CLR C
    RRC A
    CALL DELAY
    MOV P2,A
    CJNE A,#00H,LAPC1 )
    Bó tay. mình học C bạn ak!

    Comment


    • bạn ơi cho mình hỏi ý nghĩa của câu lệnh này tt=~tt; và tại sao bạn lại cho nó vào phần chống rung cho phím nhấn
      vì DIY mà học lại nhiều quá ợ! chết mất

      Comment


      • Nguyên văn bởi tanvp1992 Xem bài viết
        bạn ơi cho mình hỏi ý nghĩa của câu lệnh này tt=~tt; và tại sao bạn lại cho nó vào phần chống rung cho phím nhấn
        tt là viết tắt của trạng thái, khi nhấn vào nút thì sẽ lật trạng thái, và trong chương trình chính sẽ xử lí các trạng thái này. Ví dụ: nút start/stop , nhấn lần 1 chạy, lần 2 ngừng, chu kì lặp lại thì dùng cách này nhé!

        Comment


        • Bài tập 29

          Share một vài mạch trái tim mô phỏng
          TẢI VỀ: TRAI TIM.rar

          Comment


          • Bài tập 30

            Giao tiếp AT89S52 với máy tính chuẩn RS232. AT89S52 kết nối với bàn phím ma trận 4x4 và LCD hiển thị. Trên máy tính có chương trình để điều khiển VDK hiển thị chuỗi.
            Việc giao tiếp thực hiện theo 2 chiều, VDK gửi chuỗi lên máy tính, máy tính gửi chuỗi xuống VDK.
            Yêu cầu:
            -C# 2010
            -Proteus 7.8
            -Keil C 4
            - Virtual Serial Port Driver 6.9
            TẢI CODE VÀ FILE MÔ PHỎNG:
            NGUYENTHANHHAI-GIAOTIEPRS232.rar

            Comment


            • Anh có code điều khiển 60 led dùng 74HC595 không, code C
              Nhận vẽ mạch in ^_^
              TEL: 0167 4500 365
              Mail:

              Comment


              • chủ thớt có thể hướng dẫn e các quét led 7 bằng timer đc không?cho mình vd cụ thể nha...thanks a

                Comment


                • các pro xem giúp chương trình của e hiển thị led từ 00-99 mà sao mô phỏng trên proteus chẳng lên chỉ hiện 2 số 0 to đùng...mong các pro chỉgiùm lỗi.e mới học nên còn gà lắm có gì k phải mong các pro chỉ bảo..thanks all



                  #include <REGX52.H>

                  sbit led_1=P3^0;
                  sbit led_2=P3^1;
                  unsigned int i,j;
                  unsigned char dem,chuc,donvi;
                  unsigned char led7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
                  // ham tre
                  void delay(unsigned char time)
                  {
                  for(i=0;i<time;i++)
                  for(j=0;j<125;j++);
                  }
                  void main()
                  {
                  while(1)
                  { dem=0;
                  donvi=dem/10;
                  chuc=(dem%100)/10;

                  for(i=0;i<20;i++)
                  {
                  {
                  led_1=1;
                  P2=led7[donvi];
                  delay(10);
                  led_1=0;
                  P2=0xff;
                  led_2=1;
                  P2=led7[chuc];
                  delay(10);
                  led_2=0;
                  P2=0xff;
                  }

                  dem=dem+1;
                  if(dem==99)dem=0;
                  }
                  }
                  }

                  Comment


                  • Nguyên văn bởi anhommatroi Xem bài viết
                    các pro xem giúp chương trình của e hiển thị led từ 00-99 mà sao mô phỏng trên proteus chẳng lên chỉ hiện 2 số 0 to đùng...mong các pro chỉgiùm lỗi.e mới học nên còn gà lắm có gì k phải mong các pro chỉ bảo..thanks all



                    #include <REGX52.H>

                    sbit led_1=P3^0;
                    sbit led_2=P3^1;
                    unsigned int i,j;
                    unsigned char dem,chuc,donvi;
                    unsigned char led7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
                    // ham tre
                    void delay(unsigned char time)
                    {
                    for(i=0;i<time;i++)
                    for(j=0;j<125;j++);
                    }
                    void main()
                    {
                    while(1)
                    { dem=0;
                    donvi=dem/10;
                    chuc=(dem%100)/10;

                    for(i=0;i<20;i++)
                    {
                    {
                    led_1=1;
                    P2=led7[donvi];
                    delay(10);
                    led_1=0;
                    P2=0xff;
                    led_2=1;
                    P2=led7[chuc];
                    delay(10);
                    led_2=0;
                    P2=0xff;
                    }

                    dem=dem+1;
                    if(dem==99)dem=0;
                    }
                    }
                    }
                    trong hàm delay dùng biến i,và vòng lặp for cũng dùng biến i.
                    và một số chỗ cần sửa lại.
                    Code:
                    #include <REGX52.H>
                    
                    sbit led_1=P3^0;
                    sbit led_2=P3^1;
                    unsigned int i,j,t;
                    unsigned char dem,chuc,donvi;
                    unsigned char led7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                    // ham tre
                    void delay(unsigned char time)
                    { 
                    for(i=0;i<time;i++)
                    for(j=0;j<125;j++); 
                    }	
                    void main()
                    { dem=0;
                    while(1)
                    {	 
                    for(t=0;t<20;t++){
                    chuc=dem/10;
                    donvi=dem%10;
                    led_1=1;
                    P2=led7[donvi];
                    delay(10);
                    led_1=0;
                    P2=0xff;
                    led_2=1;
                    P2=led7[chuc];
                    delay(10);
                    led_2=0;	
                    P2=0xff;
                    }	
                    dem=dem+1;
                    if(dem==99)dem=0;
                    }
                    }
                    Click image for larger version

Name:	dem.jpg
Views:	1
Size:	155.0 KB
ID:	1383419
                    |

                    Comment


                    • hi thanks a tdm nhiu nhé..mà tiện a cho e hỏi nếu mình dùng timer để quét như thế này có phức tạp hơn không?

                      Comment


                      • dùng timer đơn giản hơn nhiều bạn ạ.
                        Nguyễn Huy Biên - 01649 802 694
                        gmail :

                        Comment


                        • bạn có thể cho mình 1 ví dụ đơn giản dùng timer quét led 7 đc không...thanks nhiu

                          Comment


                          • Nguyên văn bởi anhommatroi Xem bài viết
                            bạn có thể cho mình 1 ví dụ đơn giản dùng timer quét led 7 đc không...thanks nhiu
                            trong topic này có đó bạn, chịu khó "đào mộ " lại nha!

                            Comment


                            • ủng hộ bạn 1 code cơ bản về RTX-Tiny (hệ điều hành thời gian thực)để các bạn tham khảo
                              Code:
                              #include <REGX51.H>
                              #include <rtx51tny.h>
                              sbit Led1 = P2^0;
                              sbit Led2 = P2^1;
                              #define Led_Statut P2_7
                              //sbit Led3 = P2^2;
                              //sbit Led4 = P2^3;
                              unsigned  char maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                              unsigned  char count;
                              unsigned  char i;
                              void quetled(unsigned char so)
                              {
                              	Led1 = 1;
                              	P3   = maled[so/10];
                              	os_wait (K_TMO, 5, 0);
                              	Led1 = 0;
                              	P3   = 0xff;
                              	
                              	Led2 = 1;
                              	P3   = maled[so%10];
                              	os_wait (K_TMO, 5, 0);
                              	Led2 = 0;
                              	P3   = 0xff;
                              }
                              job1() _task_ 0
                              {
                              		os_create_task (1);
                              		os_create_task (2);
                              		os_create_task (3);
                              		while(1)
                              		{
                              			quetled(count);
                              		}
                              
                              }
                              job2() _task_ 1
                              {
                              	while(1)
                              	{
                              		count ++;
                              		os_wait (K_TMO, 100, 0);
                              		if(count == 100)
                              		count = 0;
                              	}
                              }
                              job3() _task_ 2
                              {
                              	while(1)
                              	{
                              		Led_Statut = ! Led_Statut;
                              		os_wait (K_TMO, 50, 0);
                              	}
                              }
                              job4() _task_ 3
                              {	while(1)
                              	{
                              	P1 = 0xfe;
                              	os_wait (K_TMO, 100, 0);
                              	for(i=0;i<7;i++)
                              	{
                              		P1 = P1 << 1;
                              		os_wait (K_TMO, 100, 0);
                              	}
                              	P1 = 0xff;
                              	os_wait (K_TMO, 100, 0);
                               }
                              }
                              Nguyễn Huy Biên - 01649 802 694
                              gmail :

                              Comment


                              • Nguyên văn bởi bienhou Xem bài viết
                                ủng hộ bạn 1 code cơ bản về RTX-Tiny (hệ điều hành thời gian thực)để các bạn tham khảo
                                Code:
                                #include <REGX51.H>
                                #include <rtx51tny.h>
                                sbit Led1 = P2^0;
                                sbit Led2 = P2^1;
                                #define Led_Statut P2_7
                                //sbit Led3 = P2^2;
                                //sbit Led4 = P2^3;
                                unsigned  char maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                                unsigned  char count;
                                unsigned  char i;
                                void quetled(unsigned char so)
                                {
                                	Led1 = 1;
                                	P3   = maled[so/10];
                                	os_wait (K_TMO, 5, 0);
                                	Led1 = 0;
                                	P3   = 0xff;
                                	
                                	Led2 = 1;
                                	P3   = maled[so%10];
                                	os_wait (K_TMO, 5, 0);
                                	Led2 = 0;
                                	P3   = 0xff;
                                }
                                job1() _task_ 0
                                {
                                		os_create_task (1);
                                		os_create_task (2);
                                		os_create_task (3);
                                		while(1)
                                		{
                                			quetled(count);
                                		}
                                
                                }
                                job2() _task_ 1
                                {
                                	while(1)
                                	{
                                		count ++;
                                		os_wait (K_TMO, 100, 0);
                                		if(count == 100)
                                		count = 0;
                                	}
                                }
                                job3() _task_ 2
                                {
                                	while(1)
                                	{
                                		Led_Statut = ! Led_Statut;
                                		os_wait (K_TMO, 50, 0);
                                	}
                                }
                                job4() _task_ 3
                                {	while(1)
                                	{
                                	P1 = 0xfe;
                                	os_wait (K_TMO, 100, 0);
                                	for(i=0;i<7;i++)
                                	{
                                		P1 = P1 << 1;
                                		os_wait (K_TMO, 100, 0);
                                	}
                                	P1 = 0xff;
                                	os_wait (K_TMO, 100, 0);
                                 }
                                }
                                Rất cám ơn bạn đã chia sẽ, hy vọng bạn sẽ đóng góp cho topic này nhiều bài hay nữa, để mọi người cùng học tập. À. Nếu có file mô phỏng thì cho mình xin luôn nha.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X