|
188黑幣
本人實在小白,麻煩幫忙編譯成stc89c52的HEX文件,謝謝。
自己編譯,出現以下結果:Build target 'Target 1'
assembling STARTUP.A51...
linking...
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C_START
MODULE: STARTUP.obj (?C_STARTUP)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ?C_START
MODULE: STARTUP.obj (?C_STARTUP)
ADDRESS: 000DH
Program Size: data=9.0 xdata=0 code=15
"yuu" - 0 Error(s), 2 Warning(s).
源文件如下:
yuu.rar
(17.18 KB, 下載次數: 30)
2019-7-15 07:42 上傳
點擊文件名下載附件
有錯誤,麻煩幫忙檢查一下
代碼如下:
- #include <REG51.H>
- #define uchar unsigned char //類型定義,方便書寫
- #define uint unsigned int
- uchar code roundz[] ={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; //步進電機正轉控制數組
- uchar code roundf[] ={0x08,0x0C,0x04,0x06,0x02,0x03,0x01,0x09}; //步進電機反轉控制數組
- uchar code disptab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽極LED顯示器顯示碼
- sbit beep=P2^7;
- sbit baiwei=P2^0;
- sbit shiwei=P2^1;
- sbit gewei=P2^2; //數碼管位選
- uint num,sec;
- #define K1 0x06
- #define K20x5
- #define K3 0x3 //按鍵碼,分別檢測三個按鍵是否有按下
- sbit in_water=P3^3;
- sbit out_water=P3^4;
- sbit LED_bz=P3^5;
- sbit LED_qr=P3^6;
- sbit LED_sg=P3^7; //5個LED燈,分別為進水,出水,標準,輕柔和甩干
- //**************基本延遲函數************************************************
- void delay(uint dcnt) // 延遲時間為dcntms
- {
- uint i,j;
- for(i=dcnt;i>0;i--)
- for(j=120;j>0;j--);
- }
- //************定時器0控制倒計時*****************************************
- void count_down() interrupt 1
- {
- int count ;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256; //定時器0每50ms產生一次中斷;
- count ++;
- if(count == 20) //每50*20=1s sec的值減1
- {
- count =0;
- sec--;
- if(sec==0) //計時結束時,關閉總中斷,電機停止轉動。
- {
- EA=0;
- P0=0xff;
- P1=0xff;
- P2=0xff;
- P3=0xff;
- while(1);
- }
- }
- }
- //***************倒計時的數碼管顯示程序*******************************
- void display() interrupt 3 //利用定時器1來進行數碼管顯示
- {
- TH1=(65536-5000)/256; //每5ms掃描一次
- TL1=(65536-5000)%256;
- num=(num%3);
- P0=0xff; //消影
- switch(num)
- {
- case 0:
- P0=disptab[sec/100];
- baiwei=1; shiwei=0;gewei=0;
- break;
- case 1:
- P0=disptab[(sec/10)%10];
- baiwei=0; shiwei=1; gewei=0;
- break;
- case 2:
- P0=disptab[sec%10];
- baiwei=0; shiwei=0; gewei=1;
- break;
- default:break;
- }
- num++;
- }
- //************************步進電機正轉控制函數******************************
- void RotateWise(uinttime,uchar stepcnt) //time為轉一步時間,stepcnt為圈數
- {
- uchar i ,j;
- for(i=0;i<stepcnt;i++)
- {
- for(j=0;j<8;j++)
- {
- P1= roundz[j] ;
- delay (time); //更改delay里數值可改變轉速,轉一圈時間為time*8 ms
- }
- }
- }
- //***********************步進電機反轉控制函數****************************
- void ContraRotate(uinttime,uchar stepcnt) //time為轉一步時間,stepcnt為圈數
- {
- uchar i ,j;
- for(i=0;i<stepcnt;i++)
- {
- for(j=0;j<8;j++)
- {
- P1= roundf[j] ; //更改delay里數值可改變轉速,轉一圈時間為time*8 ms
- delay (time);
- }
- }
- }
- //**************************洗滌子程序****************************************
- void xidi()
- {
- uint i;
- in_water = 0;
- delay(9000); //開水閥,進水9s
- in_water = 1; //關水閥
- delay(1000);
- for(i=10;i>0;i--) //轉動十次
- {
- RotateWise(50,10) ; //正轉10圈,轉速為50ms*8
- delay(1000); //停止一秒
- ContraRotate(50,10) ; //反轉10圈,轉速為50ms*8
- delay(1000);
- }
- }
- //**************************漂洗子程序****************************************
- void piaoxi()
- {
- uint i;
- in_water = 0;
- delay(9000); //開水閥,進水9s
- in_water = 1; //關水閥
- delay(1000);
- for(i=5;i>0;i--) //轉動五次
- {
- RotateWise(100,10) ; //正轉10圈,轉速為100ms*8
- delay(1000); //停止一秒
- ContraRotate(100,10) ; //反轉10圈,轉速為100ms*8
- delay(1000);
- }
- }
- //*********************脫水子程序*******************************************
- void tuoshui()
- {
- uint i;
- out_water = 0; //打開排水閥
- delay(9000); //排水9s
- for(i=10;i>0;i--) //轉動十次
- {
- RotateWise(50,10) ; //正轉10圈,轉速為50ms*8
- }
- beep=0;
- delay(1000); //蜂鳴器警報
- beep=1;
- out_water =1 ; //甩干完畢,關閉水閥
- }
- //********************標準模式************************************************
- void biaozhun()
- { sec=360; //設定倒計時數目
- LED_bz = 0; //點亮“標準”LED燈
- xidi(); //洗滌
- piaoxi();
- piaoxi(); //2次漂洗
- tuoshui(); //脫水
- LED_bz=1; //熄滅LED燈
- }
- //*********************輕揉模式********************************************
- void qingrou()
- { sec=250; //設定倒計時數目
- LED_qr = 0; //點亮“輕揉”LED燈
- piaoxi();
- piaoxi(); //2次漂洗
- tuoshui(); //脫水
- LED_qr = 1; //熄滅LED燈
- }
- //**********************甩干模式********************************************
- void shuaigan()
- {
- sec=50; //設定倒計時數目
- LED_sg = 0; //點亮“甩干”LED燈
- tuoshui(); //脫水
- LED_sg = 1; //熄滅LED燈
- }
- //********************鍵盤掃描程序****************************************
- uchar scankey()
- {
- int key;
- if((P3&0x07)== 0x07)
- return(0xff); //消抖
- delay(30);
- if((P3&0x07)== 0x07)
- return(0xff);
- key = P3&0x07;
- while ((P3&0x07)!=0x07); //當有按鍵按下的時候,返回key值,判斷哪個按鍵被按下
- return key;
- }
- //******************主函數************************************************
- void main()
- {
- TMOD|=0x11; //定時器0和定時器1模式 工作方式1
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256; //定時0器寄存器裝初值,每50ms產生一次中斷
- EA=0; //關總中斷
- ET0=1; //開定時器0中斷
- TH1=(65536-5000)/256; //定時器1寄存器裝初值,沒5ms產生一次中斷
- TL1=(65536-5000)%256;
- ET1=1; //打開定時器1中斷
- TR0=1;
- TR1=1; //打開定時器0和定時器1
- while(1)
- {
- uchar key = scankey();
- if (key == K1)
- {
- EA=1; //開總中斷[em12]
- biaozhun();
- }
- if (key == K2)
- {
- EA=1;
- qingrou();
- }
- if (key == K3)
- {
- EA=1;
- shuaigan();
- } } }
復制代碼
|
最佳答案
查看完整內容
圖片[/backcolor]附件[/backcolor]
|