Thông báo

Collapse
No announcement yet.

giúp mình về cái code máy tính này với !!

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

  • giúp mình về cái code máy tính này với !!

    mình cần thay phím 'on' bằng ham 'sin' mình viết bằng ceil C

    bạn nào giúp mình minh xin cảm ơn rât nhiều!!

    phần code
    #include <regx51.h>
    #define COL P1
    int xdphim(void); //quet de xac dinh phim nhan
    void nhanphim(void); //nhan mot key
    void gtrphim(void); //tinh gia tri so nhap tu ban phim
    void gan(void); //xac dinh cac phep +,-,x,/ tu ban phim va tinh ra ket qua
    void tinhtoan(void); //xac dinh phep +,-,x,/ tu ban phim va ket qua tu phep tinh truoc
    void hienthilcd(long int); //hien thi ket qua
    void lcdinit(void); //khoi tao lcd
    void lcdcmd(unsigned char); //ghi lenh ra lcd
    void lcddata(unsigned char); //ghi du lieu ra lcd
    void reset(void); //reset he thong ve gia tri gan ban dau
    void tre(unsigned int); //tre
    int matranp[4][4]={7,8,9,10,
    4,5,6,11,
    1,2,3,12,
    14,0,15,13};
    sfr ldata=0xA0;
    sbit rs=P3^0;
    sbit rw=P3^1;
    sbit en=P3^2;
    sbit h0=P3^4;
    sbit h1=P3^5;
    sbit h2=P3^6;
    sbit h3=P3^7;
    long int b,c,gt=0,tp;
    int digflag=1; //neu bang '1', thi thuc hien phep tinh neu bang '0' thi khong thu hien phep tinh
    int noflag=1; //neu bang '1', '2' lan luot la gia tri truoc va sau khi nhan dau
    int opflag=0; //neu bang 1 gia tri truoc dau '+','-','x','/' duoc nhan, 0 la chua duoc nhan
    int loaidau=0; //loai phep tinh duoc nhan neu=0 mac dinh,bang 1 la '+', 2 la '-', 3 la 'x', 4 la '/'
    int daubang=0; //neu bang '1' la dau bang duoc nhan bang '0' la dau '=' chua duoc nhan
    int key=0;
    int temp;
    int songuyen=0; // neu =1 thi la ket qua la so nguyen am neu =0 thi la ket qua nguyen duong
    unsigned int hang,cot;
    float remflt,fa,fc;
    unsigned int i,j;
    unsigned char ch;
    unsigned int dem=0;
    void write_string(char *s)
    {
    while(*s)
    {
    lcddata( *s) ;
    s++;
    }
    }
    void main(void)
    {
    lcdinit(); //khoi tao lcd
    lcdcmd(0x01); //xoa man hinh
    lcdcmd(0x80); // dua con tro ve dau dong 1
    write_string(" MAY TINH ");
    lcdcmd(0xc0); //dua contro ve dau dong2
    write_string(" Lop D09DTA1 ");
    tre(200);
    lcdinit();
    lcdcmd(0x01);
    lcdcmd(0x80);
    write_string(" NHOM 3 ");
    lcdcmd(0x80);
    write_string(" TAI-VietAnh ");
    while(1)
    {
    COL=0xFF;
    h0=0; h1=0; h2=0; h3=0;
    nhanphim();
    key=xdphim();
    if(key>=0&&key<=9)
    {
    temp=key;
    if((noflag==1||noflag==2)&&digflag==1)
    gtrphim();
    }
    if(key>=10&&key<=13)
    {
    temp=key;
    if(opflag==1)
    gan();
    }
    if(key==15)
    {
    temp=key;
    if(daubang==1)
    tinhtoan();
    }
    if(key==14)
    {
    temp=key;
    reset();
    }
    }
    }
    int xdphim(void) //quet de xac dinh phim nhan
    {
    do
    {
    tre(20); //kiem tra nhieu phim nhan
    hang=COL;
    hang=hang&(0x0F);
    }while(hang==0x0F);
    while(1)
    {
    h0=0;
    h1=1;
    h2=1;
    h3=1;
    hang=COL;
    hang=hang&(0x0F);
    if(hang!=0x0F){cot=0;break;}
    h0=1;
    h1=0;
    h2=1;
    h3=1;
    hang=COL;
    hang=hang&(0x0F);
    if(hang!=0x0F){cot=1;break;}
    h0=1;
    h1=1;
    h2=0;
    h3=1;
    hang=COL;
    hang=hang&(0x0F);
    if(hang!=0x0F){cot=2;break;}
    h0=1;
    h1=1;
    h2=1;
    h3=0;
    hang=COL;
    hang=hang&(0x0F);
    if(hang!=0x0F){cot=3;break;}
    }
    if(hang==0x0E)key=matranp[cot][0];
    if(hang==0x0D)key=matranp[cot][1];
    if(hang==0x0B)key=matranp[cot][2];
    if(hang==0x7)key=matranp[cot][3];
    return key;
    }
    void nhanphim(void)
    {
    do
    {
    tre(5);
    hang=COL;
    hang=hang&(0x0F);
    }while(hang!=0x0F);
    }
    void gtrphim(void) // tinh ket qua tu cac phim duoc nhan
    {
    if(noflag==1) opflag=1;
    lcddata(48+key);
    gt=(gt*10)+key;
    }
    void gan(void)
    {
    if(noflag==1)fa=gt; // gia tri phim
    if(daubang==0&&noflag==2)fa=fc; //gia tri lay ket qua truoc
    if(key==13){loaidau=1; lcddata('+'); }
    if(key==12){loaidau=2; lcddata('-'); }
    if(key==11){loaidau=3; lcddata('x'); }
    if(key==10){loaidau=4; lcddata(253); }
    digflag=1; //dat phep tinh moi
    opflag=0; //khong the nhan duoc cho den khi nut on duoc nhan hoac nhan '+','-','x','/'
    noflag=2; //gia tri sau khi nhan '+','-','x','/'
    gt=0;
    daubang=1;
    }
    void tinhtoan(void)
    {
    if(noflag==2)b=gt;
    daubang=0; //dau '=' da duoc nhan
    digflag=0; //khong thuc hien phep tinh nao cho den khi nhan'+','-','x','/' hoac nhan 'on'
    opflag=1; // gia tri moi
    songuyen=0;
    if(loaidau==1)fc=fa+b;
    if(loaidau==2)fc=fa-b;
    if(loaidau==3)fc=fa*b;
    if(loaidau==4)fc=fa/b;
    if(fc<0)
    {
    fc=fc*(-1); songuyen=1;
    } //neu ket qua am thi songuyen=1
    c=fc;
    remflt=fc-c;
    tp=remflt*10000;
    gt=0;
    lcdinit();
    if(songuyen==1) //vi songuyen=1 nhu tren moi hien thi dau '-'
    {
    lcddata('-');
    fc=fc*(-1);
    }
    hienthilcd(c); //hien thi so truoc dau '.'
    lcddata('.');
    hienthilcd(tp);
    }
    void hienthilcd(long int ketqua)
    {
    long int digcnt;
    unsigned char ctemp;
    int l;
    for(digcnt=1;digcnt<10000000000;digcnt=digcnt*10)
    if((ketqua/digcnt)>=0&&(ketqua/digcnt)<=9) break;
    for(;digcnt>=1;digcnt=digcnt/10)
    {
    l=ketqua/digcnt;
    ctemp=48+l;
    lcddata(ctemp); //hien thi ket qua
    ketqua=ketqua%digcnt;
    }
    }
    void lcdinit(void) //khoi tao lcd
    {
    dem=0;
    lcdcmd(0x38); // 2 dong ma tran 5x7
    tre(1);
    lcdcmd(0x0E); // hien thi dau con tro khong nhap nhay
    tre(1);
    lcdcmd(0x01); // xoa man hinh
    tre(1);
    lcdcmd(0x06); //dich chuyen con tro sang ben phai
    tre(1);
    lcdcmd(0x80); // quay tro lai dong thu nhat
    tre(1);
    }
    void lcdcmd(unsigned char value) //lcdcmd() Gui lenh ra LCD
    {
    ldata=value;
    rs=0; // Ghi lenh
    rw=0;
    en=1;
    tre(5);
    en=0;
    }
    void lcddata(unsigned char value) // gui du lieu ra lcd
    {
    if(dem==16){lcdcmd(0xC0); dem=0;} //neu het 16 o thi xuong dong 2
    ldata=value;
    rs=1; // ghi du lieu
    rw=0;
    en=1;
    tre(1);
    en=0;
    dem++;
    }
    void reset(void) //reset lai cac dieu kien ban dau de thuc hien phep tinh moi
    {
    noflag=1;
    digflag=1;
    opflag=0;
    loaidau=0;
    daubang=0;
    gt=0;
    lcdinit();
    }
    void tre(unsigned int itime)
    {
    unsigned int i,j;
    for(i=0;i<itime;i++)
    for(j=0;j<1000;j++);
    }

  • #2
    ở phím key=14 ! mình sửa mà không đc

    Comment

    Về tác giả

    Collapse

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

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

    Collapse

    • nguyendinhvan
      Trả lời cho Vấn đề về tốc độ quay
      bởi nguyendinhvan
      Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
      Hôm qua, 19:50
    • Andrea14
      Vấn đề về tốc độ quay
      bởi Andrea14
      Chào mọi người,

      Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
      12-12-2025, 12:42
    • bqviet
      Trả lời cho Đấu tắt điện cho máy tính bảng
      bởi bqviet
      Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
      06-12-2025, 17:17
    • nguyendinhvan
      Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
      bởi nguyendinhvan
      Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
      05-12-2025, 19:59
    Đang tải...
    X