新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 電子秤AD TM7710/TM7709測試程序

        電子秤AD TM7710/TM7709測試程序

        作者: 時間:2016-11-29 來源:網絡 收藏
        void keyin(void) interrupt 0 using 0 // 中斷 0 服務程序
        {char X,i;
        long int y;
        send7289(0x15); // 接收數據
        X=receive();
        cs7289=1;
        X=X&0x1f;
        switch(X)
        {case 0xf : {zongjia=zongjia+jine;
        qingdan[qb][0]=sh;
        qingdan[qb][1]=danjia[sh];
        qingdan[qb][2]=shizhong;
        qingdan[qb][3]=jine;
        qb++; sh=0;dot=0;
        danjia[0]=0;
        for(i=0;i<6;i++) jiage[i]=0;
        }
        break; // 累加
        case 0xe : pizhong=zhongliang; break; // 去皮
        case 0xd : {danjia[sh]=0;dot=0;} break; // 清單價
        case 0xc : {zongjia=0;jine=0;dot=0;list=0;qb=0;pizhong=0;
        if(sh==0) danjia[sh]=0;} break; // 總清
        case 0xa : dot=1;break; // 點
        case 0xb : list=1;break; // 清單
        case 0x19 : sh=10;break;
        case 0x18 : sh=9;break;
        case 0x17 : sh=8;break;
        case 0x16 : sh=7;break;
        case 0x15 : sh=6;break;
        case 0x14 : sh=5;break;
        case 0x13 : sh=4;break;
        case 0x12 : sh=3;break;
        case 0x11 : sh=2;break;
        case 0x10 : sh=1;break;
        case 0x1f :
        case 0x1e :
        case 0x1d :
        case 0x1c :
        case 0x1a : break;
        case 0x1b : dot=1;break;
        default :{ if(dot==0) {jiage[0]=jiage[1];jiage[1]=jiage[2];jiage[2]=X;}
        if(dot==1) {jiage[4]=X;dot++; }
        else if(dot==2) {jiage[5]=X; dot++;}
        else if(dot>2) break;
        // lcdi_send(0x84);
        y=jiage[0];
        y=y*10+jiage[1];
        y=y*10+jiage[2];
        y=y*10+jiage[4];
        danjia[sh]=y*10+jiage[5];
        }
        }
        while(key7289==0); // 等待鍵盤松開
        }
        /*
        void ad(void) interrupt 2 using 1
        {short x,y;
        x=ad_244;
        y=x;
        if(x&0x80) baojing();
        else x=x>>4;
        y=y&0xf;
        bcd[x]=y;
        } */
        // 初始頁面
        void ini() // 輸入收銀員編號 , 日期
        {short i,j;
        char X;
        lcdi_send(0x80); // 提示輸入收銀員編號
        i=0;
        while(message1[i]) lcdd_send(message1[i++]);
        for(i=8;i<12;i++)
        {
        while(key7289);
        send7289(0x15); // 接收數據
        X=receive();
        cs7289=1;
        bianhao[i]=X+0x30;
        lcdi_send(0x93);
        for(j=8;j<16;j++) lcdd_send(bianhao[j]);
        while(key7289==0);
        }
        lcdi_send(0x88); // 提示輸入日期
        i=0;
        while(message2[i]) lcdd_send(message2[i++]);
        for(i=0;i<10;i++) // 輸入日期
        {if(i==4||i==7) i++;
        while(key7289==1);
        send7289(0x15); // 接收數據
        X=receive();
        cs7289=1;
        riqi[i]=X+0x30;
        j=0;
        lcdi_send(0x9a);
        for(j=0;j<10;j++) lcdd_send(riqi[j]);
        while(key7289==0);
        }
        while(key7289);
        nop1();
        while(key7289==0);
        nop1();
        lcdi_send(0x1);
        }
        //LCD 子程序
        void ini_lcd() //LCD 初始化子程序
        {
        lcdi_send(0x30);
        lcdi_send(0x1); // 總清
        lcdi_send(0xc);
        lcdi_send(0x2); // 光標右移, AC+1
        }
        void lcdd_send(short X) //LCD 發送數據子程序
        {chk_busy();
        nop1();
        lcd_di=1;lcd_rw=0;lcd_e=0;
        P0=X;
        for(dealy=0;dealy<5;dealy++);//
        lcd_e=1; X=X;
        P0=0xff;
        }
        void lcdi_send(short X) //LCD 發送指令子程序
        {chk_busy();
        nop1();
        lcd_di=0;lcd_rw=0;lcd_e=0;
        P0=X;
        for(dealy=0;dealy<5;dealy++);//
        lcd_e=1; X=X;
        P0=0xff;
        }
        void chk_busy()
        {short i=0xff;
        while(i&0x80)
        {lcd_di=0;
        lcd_rw=1;
        lcd_e=0;
        i=P0;
        lcd_e=1;
        }
        }
        //7289 子程序
        void ini_7289()
        {short i;
        cs7289=1; key7289=1; dio7289=1; //7289 初始化子程序
        for(i=0;i<50;i++)
        for(dealy=0;dealy<5000;dealy++); // 延時 25ms
        send7289(0xa4); cs7289=1;
        }
        void send7289(short X) //7289 發送數據子程序
        {short i,j=1;
        cs7289=0;
        for(dealy=0;dealy<6;dealy++); // 延時 50us
        for(i=7;i>=0;i--)
        {j=j<
        dio7289=X&j;
        j=1;j=1;clk7289=1;
        for(dealy=0;dealy<1;dealy++) ; // 延時 10us
        clk7289=0;
        for(dealy=0;dealy<1;dealy++) ; // 延時 10us
        }
        dio7289=0;
        }
        short receive() //7289 接收數據子程序
        {short i,X=0;
        dio7289=1;
        for(dealy=0;dealy<6;dealy++); // 延時 50us
        for(i=0;i<=7;i++)
        {clk7289=1;
        for(dealy=0;dealy<1;dealy++); // 延時 10us
        X=X<<1;
        if(dio7289)X++;
        clk7289=0;
        for(dealy=0;dealy<1;dealy++); // 延時 10us
        }
        dio7289=0;
        return(X);
        }
        //ad
        //AD 子程序
        int ad1()
        {short k,x;
        int ad_zhi=0,xz;
        EA=0;
        ad_start=1;
        for(k=0;k<5;k++)
        { while(ad_stb);
        x=ad_244;
        x=x&0xf;
        ad_zhi=ad_zhi*10+x;
        }
        ad_start=0;
        EA=1;EX0=1;
        ad_zhi=ad_zhi>>1;
        xz=ad_zhi-50;
        xz=xz/100;
        ad_zhi=ad_zhi+xiuzheng[xz];
        return(ad_zhi);
        void d_change(long X)
        {char qian,bai,shi,ge,shifen,baifen;
        long int yu;
        if(X>999999) error1();
        qian=X/100000; yu=X%100000;
        bai=yu/10000; yu=yu%10000;
        shi=yu/1000; yu=yu%1000;
        ge=yu/100; yu=yu%100;
        shifen=yu/10;
        baifen=yu%10;
        qian=qian+0x30;
        bai=bai+0x30;
        shi=shi+0x30;
        ge=ge+0x30;
        shifen=shifen+0x30;
        baifen=baifen+0x30;
        if(qian==0x30)
        {qian=0x20;
        if(bai==0x30)
        {bai=0x20;
        if(shi==0x30) shi=0x20;
        }
        }
        shuju[0]=qian;
        shuju[1]=bai;
        shuju[2]=shi;
        shuju[3]=ge;
        shuju[4]=.;
        shuju[5]=shifen;
        shuju[6]=baifen;
        }
        void baojing()
        {short i;
        for(i=0;i<50;i++)
        {baoj=0;
        for(dealy=0;dealy<10;dealy++);
        baoj=1;
        for(dealy=0;dealy<10;dealy++);
        }
        }
        參考書目:
        《電子電路設計與實踐》 山東科學技術出版社 姚福安著
        《新型集成電路》 西安電子科技大學出版社 楊振江著
        《 8051 單片機實踐與應用》 清華大學出版社 吳金戎著
        《積分式 A/D 轉換器其他專用集成電路分冊》
        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 二连浩特市| 衡山县| 平邑县| 靖远县| 益阳市| 乡城县| 龙川县| 卓资县| 云霄县| 长沙县| 云安县| 东乡县| 新沂市| 乌鲁木齐市| 蒙自县| 洞口县| 扎鲁特旗| 榆中县| 牡丹江市| 锦州市| 曲靖市| 兴安盟| 洛宁县| 崇礼县| 凌云县| 托克逊县| 陆丰市| 中西区| 深泽县| 永福县| 黄陵县| 襄垣县| 黄浦区| 新泰市| 当阳市| 文昌市| 荔浦县| 武隆县| 大英县| 长岛县| 晋城|