Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Ngắt trong C, Giúp chỉnh sửa code về ngắt

  1. #1
    Ngày gia nhập
    02 2007
    Bài viết
    3

    Wink Ngắt trong C, Giúp chỉnh sửa code về ngắt

    Mình đang có 1 vấn đề là mính cần 1 cái đồng hồ mà nó thỏa mãn điều sau:
    Chương trình thường trú
    Đồng hồ hiển thị ở góc dưới, bên phải của màn hình, gồm giờ, phút và giây, ngay cả khi người dùng đang soạn thảo mã nguồn.
    Mỗi giây, đồng hồ sẽ tự động cập nhật lại giá trị mới (đồng hồ hiển thị thời gian thực)
    Chương trình chỉ kết thúc khi thoát khỏi chế độ DOS.

    Mình có đồng hồ rùi nhưng chưa biết cách nào để cho nó thành thường trú ,mình mong các bạn nào cao tay có thể giúp mình vấn đề này ,xin cám ơn các bạn trườc nha.Mình đang cần rất gấp .Thank
    C Code:
    1. #include <conio.h>
    2. #include <graphics.h>
    3. #include <math.h>
    4. #include <dos.h>
    5.  
    6. /* he so doi tu do sang radian */
    7. #define RADS 0.017453293
    8. #define CIRCLE 200
    9.  
    10. double xc, yc;
    11. int gio, phut, giay;
    12.  
    13. void ve_kim_gio(int color)
    14. {
    15.   double angle;
    16.  
    17.   setcolor(color);
    18.   angle = ((double)360 * gio / 12 + (double)phut / 2 - 90.0) * RADS;
    19.   moveto(xc - 20.0 * cos(angle), yc - 20.0 * sin(angle));
    20.   lineto(xc - 10.0 * cos(angle + M_PI / 2), yc - 10.0 * sin(angle + M_PI/2));
    21.   lineto(xc + 110.0 * cos(angle), yc + 110.0 * sin(angle));
    22.   lineto(xc + 10.0 * cos(angle + M_PI / 2), yc + 10.0 * sin(angle + M_PI/2));
    23.   lineto(xc - 20.0 * cos(angle), yc - 20.0 * sin(angle));
    24. }
    25.  
    26. void ve_kim_phut(int color)
    27. {
    28.   double angle;
    29.  
    30.   setcolor(color);
    31.   angle = ((double)360 * phut / 60 + (double)giay / 10 - 90.0) * RADS;
    32.   moveto(xc - 30.0 * cos(angle), yc - 30.0 * sin(angle));
    33.   lineto(xc - 8.0 * cos(angle + M_PI / 2), yc - 8.0 * sin(angle + M_PI/2));
    34.   lineto(xc + 140.0 * cos(angle), yc + 140.0 * sin(angle));
    35.   lineto(xc + 8.0 * cos(angle + M_PI / 2), yc + 8.0 * sin(angle + M_PI/2));
    36.   lineto(xc - 30.0 * cos(angle), yc - 30.0 * sin(angle));
    37. }
    38.  
    39. void ve_kim_giay(int color)
    40. {
    41.   double angle;
    42.  
    43.   setcolor(color);
    44.   angle = ((double)360 * (giay - 3) / 60) * RADS;
    45.   moveto(xc - 40.0 * cos(angle), yc - 40.0 * sin(angle));
    46.   lineto(xc + 150.0 * cos(angle), yc + 150.0 * sin(angle));
    47.   setfillstyle(SOLID_FILL, color);
    48.   fillellipse(xc, yc, 3, 3);
    49. }
    50.  
    51. void ve_mat_dong_ho()
    52. {
    53.   int i, j;
    54.  
    55.   setcolor(YELLOW);
    56.   circle(xc, yc, CIRCLE);
    57.   setlinestyle(SOLID_LINE, 0, 3);
    58.   for (i=0; i<12; i++)
    59.     if (i%3 == 0)
    60.     {
    61.       line(xc + (CIRCLE - 2) * sin(RADS * (30 * i - 1)), yc + (CIRCLE - 2) * cos(RADS * (30 * i - 1)),
    62.            xc + (CIRCLE - 24) * sin(RADS * (30 * i - 1)), yc + (CIRCLE - 24) * cos(RADS * (30 * i - 1)));
    63.       line(xc + (CIRCLE - 2) * sin(RADS * (30 * i + 1)), yc + (CIRCLE - 2) * cos(RADS * (30 * i + 1)),
    64.            xc + (CIRCLE - 24) * sin(RADS * (30 * i + 1)), yc + (CIRCLE - 24) * cos(RADS * (30 * i + 1)));
    65.     }
    66.     else
    67.       line(xc + (CIRCLE - 2) * sin(RADS * (30 * i)), yc + (CIRCLE - 2) * cos(RADS * (30 * i)),
    68.            xc + (CIRCLE - 24) * sin(RADS * (30 * i)), yc + (CIRCLE - 24) * cos(RADS * (30 * i)));
    69. }
    70.  
    71. void run()
    72. {
    73.   struct time timep;
    74.   ve_mat_dong_ho();
    75.   gettime(&timep);
    76.   gio = timep.ti_hour;
    77.   phut = timep.ti_min;
    78.   giay = timep.ti_sec;
    79.   setlinestyle(SOLID_LINE, 0, 0);
    80.   do {
    81.     ve_kim_gio(YELLOW);
    82.     ve_kim_phut(GREEN);
    83.     ve_kim_giay(RED);
    84.     delay(990);
    85.     sound(1000);
    86.     delay(10);
    87.     nosound();
    88.     ve_kim_giay(BLACK);
    89.     ve_kim_phut(BLACK);
    90.     ve_kim_gio(BLACK);
    91.     giay++;
    92.     if (giay >= 60)
    93.     {
    94.       giay %= 60;
    95.       phut++;
    96.       if (phut >= 60)
    97.       {
    98.         phut %= 60;
    99.         gio++;
    100.         if (gio >= 12)
    101.           gio %= 12;
    102.       }
    103.     }
    104.   } while (!kbhit());
    105. }
    106.  
    107. void main()
    108. {
    109.   int gr_drive = DETECT, gr_mode;
    110.  
    111.   initgraph(&gr_drive, &gr_mode, "");
    112.   xc = getmaxx() / 2;
    113.   yc = getmaxy() / 2;
    114.   run();
    115.   getch();
    116.   closegraph();
    117. }(:)) (:)) (:)) (:)) :(|

    Híc cho vào thẻ code có ký hiệu {#} trên thanh công cụ chứ không phải thẻ quote nhá.
    Posted by iamvtn
    Đã được chỉnh sửa lần cuối bởi iamvtn : 15-11-2007 lúc 01:25 PM.

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    Bài này nặng thế này chả biết có dùng TSR được không.Nếu bạn muốn làm thường trú thì như sau :
    khai báo 2 cái dòng sau ngoài hàm main() nhé (Chú ý là chỉ dùng trong Tubro C thôi,nếu bạn dùng cái khác thì bỏ qua)
    Code:
    unsigned int _heaplen = 2;
    unsigned int _stklen=1024;
    Tiếp theo có 2 cái dòng lệnh sau
    Code:
    unsigned int size = _SS- _psp + _SP/16 + 50;(1)
    keep(0,size);(2)
    (1) thì đặt đầu hàm main()
    (2) đặt cuối hàm main()
    Tất cả đều nằm trong dos.h
    *Chúc bạn thành công

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Dùng ngắt 10h trong Bios để thường trú.
    Cậu coi thử tớ ko dùng cái này.

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    uh dùng ngắt cũng được nhưng cái kia là lệnh của C nó hỗ trợ (nằm trong dos.h) tội gì mà chả dùng cho dễ hơn

Các đề tài tương tự

  1. Bài tập C++ bài toán tìm đừong đi ngắn nhất bằng thuật toán FLoyd , đoạn code C++ bị lỗi các bạn xem giúp mình
    Gửi bởi BornIsBAD trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 30-11-2012, 09:23 AM
  2. Chuyển code sang code ngắn hơn trong LINQ
    Gửi bởi tinhthanhiepsi9x trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 14-04-2012, 11:19 AM
  3. Tạo ngẫu nhiên danh sách các số nguyên viết bằng C. Xem code giúp mình?
    Gửi bởi mr.en_tu_di trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 20-03-2011, 01:08 AM
  4. ngắt thời gian trong máy tính, cần sự giúp đỡ?
    Gửi bởi quangnh89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 09-03-2009, 09:05 PM
  5. Lập trình ngắt | Interupt | Ngắt 33h của Dos, Giúp mình xử lý!
    Gửi bởi thang@ trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 15-10-2007, 10:34 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn