|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
SOS |
| 作者:shuixian 欄目:單片機(jī) |
請(qǐng)問在把下列程序在Keil uVision2環(huán)境下編譯,老是不行,強(qiáng)人幫幫忙,給點(diǎn)幫助 定義的一些子函數(shù),是用匯編語言編寫的,怎樣才能調(diào)用?多謝! //定義頭文件、函數(shù)和變量 #include<stdio.h> #include<absacc.h> #include<reg51.h> /*define variable type*/ #define uCHAR unsigned CHAR void INITIAL(void); /*液晶顯示初始化*/ void CLEAR(void); /*液晶顯示清屏*/ void locate(uCHAR page,column); /*指定首字符顯示位置*/ void KEY(void); /*按鍵識(shí)別*/ void show(void); /*從當(dāng)前位置開始顯示顯示緩沖區(qū)BUFFER中的內(nèi)容*/ CHAR data BUFFER[15]; /*顯示緩沖區(qū)*/ uCHAR data NDIG; /*待顯示的字符數(shù)*/ uCHAR data KEYSTATE; /*鍵值*/ /*存放每個(gè)鍵被按下的次數(shù)*/ int xdata k1=0,k2=0, k3=0,k4=0, k5=0,k6=0, k7=0,k8=0; int xdata k9=0,k0=0, kx=0,kj=0, km1=0,km2=0, km3=0,km4=0; int xdata sumup=0; /*測試用的變量*/ //main()主函數(shù),初始化變量和液晶的初始顯示內(nèi)容。 void main(void) { uCHAR i; INITIAL(); /*顯示初始化*/ CLEAR(); /*清屏*/ /*從page3,column4開始顯示”sumup=rdy” */ /*固定長度的字符串顯示*/ locate(3,4); NDIG=sprintf(BUFFER,”sumup=rdy”); show(); //顯示子函數(shù) sumup=12345; /*從page2,column4開始顯示”sumup=12345”,為含數(shù)值的長度不確定的字符串顯示*/ locate(2,4); NDIG=sprintf(BUFFER,”SUMUP=%d”,sumup); show(); //顯示子函數(shù) /*按鍵查詢方式顯示初始內(nèi)容*/ for(;;) {KEY(); /*按鍵識(shí)別*/ while(KEYSTARE) /*有鍵被按下時(shí),根據(jù)鍵值處理*/ { SWITCH(KEYSTARE) { case 0xd7:k0+=1;break; /*0*/ case 0xee:k1+=1;break; /*1*/ case 0xde:k2+=1;break; /*2*/ case 0xbe:k3+=1;break; /*3*/ case 0xed:k4+=1;break; /*4*/ case 0xdd:k5+=1;break; /*5*/ case 0xed:k6+=1;break; /*6*/ case 0xeb:k7+=1;break; /*7*/ case 0xdb:k8+=1;break; /*8*/ case 0xbb:k9+=1;break; /*9*/ case 0x7e:km1+=1;break; /*m1*/ case 0x7d:km2+=1;break; /*m2*/ case 0x7b:km3+=1;break; /*m3*/ case 0x77:km4+=1;break; /*m4*/ case 0xe7:kx+=1;break; /***/ case 0xb7:kj+=1;break; /*#*/ } KEYSTATE=0; } locate(0,2); /*從page0,column2開始顯示”k0:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k0:%d “,k0); show(); locate(0,32); /*從page0,column32開始顯示”k1:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k1:%d “,k1); show(); locate(0,62); /*從page0,column62開始顯示”k2:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k2:%d “,k2); show(); locate(0,92); /*從page0,column92開始顯示”k3:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k3:%d “,k3); show(); locate(1,2); /*從page1,column2開始顯示”k4:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k4:%d “,k4); show(); locate(1,32); /*從page1,column32開始顯示”k5:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k5:%d “,k5); show(); locate(1,62); /*從page1,column62開始顯示”k6:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k6:%d “,k6); show(); locate(1,92); /*從page1,column92開始顯示”k7:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k7:%d “,k7); show(); locate(2,2); /*從page1,column2開始顯示”k8:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k8:%d “,k8); show(); locate(2,32); /*從page2,column32開始顯示”k9:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”k9:%d “,k9); show(); locate(2,62); /*從page2,column62開始顯示”km1:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”km1:%d “,km1); show(); locate(2,92); /*從page2,column92開始顯示”km2:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”km2:%d “,km2); show(); locate(3,2); /*從page3,column2開始顯示”km3:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”km3:%d “,km3); show(); locate(3,32); /*從page3,column32開始顯示”km4:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”km4:%d “,km4); show(); locate(3,62); /*從page3,column62開始顯示”kx:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”kx:%d “,kx); show(); locate(3,92); /*從page3,column92開始顯示”kj:<被按下的次數(shù)>”*/ NDIG=sprintf(BUFFER,”kj:%d “,kj); show(); } } |
| 2樓: | >>參與討論 |
| 作者: shuixian 于 2005/5/26 14:56:00 發(fā)布:
繼續(xù) 上面是便攜式儀表的液晶顯示與鍵盤輸入的主程序 #include<stdio.h> #include<absacc.h> #include<reg51.h> /*define variable type*/ #define uCHAR unsigned CHAR void INITIAL(void); void CLEAR(void); void locate(uCHAR page,column); void KEY(void); void show(void); CHAR data BUFFER[15]; uCHAR data NDIG; uCHAR data KEYSTATE; int xdata k1=0,k2=0, k3=0,k4=0, k5=0,k6=0, k7=0,k8=0; int xdata k9=0,k0=0, kx=0,kj=0, km1=0,km2=0, km3=0,km4=0; int xdata sumup=0; void main(void) { uCHAR i; INITIAL(); CLEAR(); locate(3,4); NDIG=sprintf(BUFFER,"sumup=rdy"); show(); sumup=12345; locate(2,4); NDIG=sprintf(BUFFER,"sumup=%d",sumup); show(); for(;;) { KEY(); while(KEYSTATE) { SWITCH(KEYSTATE) { case 0xd7:k0+=1;break; /*0*/ case 0xee:k1+=1;break; /*1*/ case 0xde:k2+=1;break; /*2*/ case 0xbe:k3+=1;break; /*3*/ case 0xed:k4+=1;break; /*4*/ case 0xdd:k5+=1;break; /*5*/ case 0xed:k6+=1;break; /*6*/ case 0xeb:k7+=1;break; /*7*/ case 0xdb:k8+=1;break; /*8*/ case 0xbb:k9+=1;break; /*9*/ case 0x7e:km1+=1;break; /*m1*/ case 0x7d:km2+=1;break; /*m2*/ case 0x7b:km3+=1;break; /*m3*/ case 0x77:km4+=1;break; /*m4*/ case 0xe7:kx+=1;break; /***/ case 0xb7:kj+=1;break; /*#*/ } KEYSTATE=0; } locate(0,2); NDIG=sprintf(BUFFER,"k0:%d ",k0); show(); locate(0,32); NDIG=sprintf(BUFFER,"k1:%d ",k1); show(); locate(0,62); NDIG=sprintf(BUFFER,"k2:%d ",k2); show(); locate(0,92); NDIG=sprintf(BUFFER,"k3:%d ",k3); show(); locate(1,2); NDIG=sprintf(BUFFER,"k4:%d ",k4); show(); locate(1,32); NDIG=sprintf(BUFFER,"k5:%d ",k5); show(); locate(1,62); NDIG=sprintf(BUFFER,"k6:%d ",k6); show(); locate(1,92); NDIG=sprintf(BUFFER,"k7:%d ",k7); show(); locate(2,2); NDIG=sprintf(BUFFER,"k8:%d ",k8); show(); locate(2,32); NDIG=sprintf(BUFFER,"k9:%d ",k9); show(); locate(2,62); NDIG=sprintf(BUFFER,"km1:%d ",km1); show(); locate(2,92); NDIG=sprintf(BUFFER,"km2:%d ",km2); show(); locate(3,2); NDIG=sprintf(BUFFER,"km3:%d ",km3); show(); locate(3,32); NDIG=sprintf(BUFFER,"km4:%d ",km4); show(); locate(3,62); NDIG=sprintf(BUFFER,"kx:%d ",kx); show(); locate(3,92); NDIG=sprintf(BUFFER,"kj:%d ",kj); show(); } #pragma asm INITP SEGMENT CODE INIROM SEGMENT CODE RSEG INIROM TABLE:DB 0E2H,0A4H,0A9H,0A0H,0C0H,0AFH RSEG INITP INITIAL: PUSH DPL PUSH DPH MOV R4,#0 INIT01:MOV DPTR,#TABLE MOV A,R4 MOVC A,@A+DPTR MOV COM,A LCALL CWE1 LCALL CWE2 INC R4 CJNE R4,#6H,INIT01 POP DPH POP DPL RET CLEAR:MOV R4,#00H CLEAR1:MOV A,R4 ORL A,#0B8H MOV COM,A LCALL CWE1 LCALL CWE2 MOV COM,#00H LCALL CWE1 LCALL CWE2 MOV R3,#3CH CLEAR2:MOV DAT,#00H LCALL DWE1 LCALL DWE2 DJNZ R3, CLEAR2 INC R4 CJNE R4,#04H, CLEAR1 RET END #pragma endasm #pragma asm RAM SEGMENT DATA PGM SEGMENT CODE RSEG RAM COM: DS 1 DAT: DS 1 XSEG AT 08000H CWADD1: DS 1 XSEG AT 08200H CRADD1: DS 1 XSEG AT 08100H DWADD1: DS 1 XSEG AT 4000H CWADD2: DS 1 XSEG AT 08200H CRADD2: DS 1 XSEG AT 08100H DWADD2: DS 1 RSEG PGM CWE1:PUSH DPL PUSH DPH MOV DPTR,#CRADD1 CWE101:MOVX A,@DPTR JB ACC.7,CWE101 MOV DPTR,#CWADD1 MOV A,COM MOVX @DPTR,A POP DPH POP DPL RET DWE1:PUSH DPL PUSH DPH MOV DPTR,#CRADD1 DWE101:MOVX A,@DPTR JB ACC.7,DWE101 MOV DPTR,#DWADD1 MOV A,DAT MOVX @DPTR,A POP DPH POP DPL RET CWE2:PUSH DPL PUSH DPH MOV DPTR,#CRADD2 CWE201:MOVX A,@DPTR JB ACC.7,CWE201 MOV DPTR,#CWADD2 MOV A,COM MOVX @DPTR,A POP DPH POP DPL RET DWE2:PUSH DPL PUSH DPH MOV DPTR,#CRADD2 DWE201:MOVX A,@DPTR JB ACC.7,DWE201 MOV DPTR,#DWADD2 MOV A,DAT | |
| 3樓: | >>參與討論 |
| 作者: 農(nóng)民講習(xí)所 于 2005/5/26 14:59:00 發(fā)布:
為什么不全用C? 初學(xué)的誤區(qū)就是太小瞧C了。C可是無所不能的。 |
|
| 4樓: | >>參與討論 |
| 作者: shuixian 于 2005/5/26 15:02:00 發(fā)布:
先別說其他的了,幫我指導(dǎo)指導(dǎo)呀,拜托了 |
|
| 5樓: | >>參與討論 |
| 作者: yharbour 于 2005/5/26 15:03:00 發(fā)布:
看看C51的寄存器使用和你的匯編里的使用匹配沒有 |
|
| 6樓: | >>參與討論 |
| 作者: shuixian 于 2005/5/26 15:09:00 發(fā)布:
匹配了 |
|
| 7樓: | >>參與討論 |
| 作者: yharbour 于 2005/5/26 15:21:00 發(fā)布:
你的錯(cuò)誤是什么? |
|
| 8樓: | >>參與討論 |
| 作者: yharbour 于 2005/5/26 15:22:00 發(fā)布:
我把你的程序考過來試了,可是全角和半角的關(guān)系編譯不了 要不你吧文件發(fā)給我看看 |
|
| 9樓: | >>參與討論 |
| 作者: shuixian 于 2005/5/26 15:25:00 發(fā)布:
怎么發(fā)給你? |
|
| 10樓: | >>參與討論 |
| 作者: yharbour 于 2005/5/26 15:26:00 發(fā)布:
liyutang@126.com |
|
| 11樓: | >>參與討論 |
| 作者: shuixian 于 2005/5/26 15:43:00 發(fā)布:
已發(fā) |
|
| 12樓: | >>參與討論 |
| 作者: yharbour 于 2005/5/26 15:52:00 發(fā)布:
如果我沒有猜錯(cuò)的話,應(yīng)該是你輸入時(shí)使用了中文輸入法 標(biāo)點(diǎn)符號(hào)使用的是全角,所以編譯器認(rèn)不了, |
|
| 13樓: | >>參與討論 |
| 作者: yharbour 于 2005/5/26 15:54:00 發(fā)布:
我這邊的錯(cuò)誤是: error A37: OPERATION INVALID IN THIS SEGMENT error C100: unprintable character 0xA1 skipped |
|
| 14樓: | >>參與討論 |
| 作者: shuixian 于 2005/5/26 16:22:00 發(fā)布:
那我改過之后還是這樣啊 你的錯(cuò)誤怎么那么少? 我的很多 |
|
| 15樓: | >>參與討論 |
| 作者: shuixian 于 2005/5/26 16:26:00 發(fā)布:
而且改了之后,錯(cuò)誤還是存在 |
|
| 16樓: | >>參與討論 |
| 作者: yharbour 于 2005/5/26 16:27:00 發(fā)布:
我又上十個(gè)這樣的,錯(cuò),還有一個(gè)沒有定義變量 如果改過來了,可以再發(fā)給我看看,源碼就行 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |