音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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ī)
SOS
請(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
繼續(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í)所
為什么不全用C?
初學(xué)的誤區(qū)就是太小瞧C了。C可是無所不能的。

4樓: >>參與討論
shuixian
先別說其他的了,幫我指導(dǎo)指導(dǎo)呀,拜托了
 
5樓: >>參與討論
yharbour
看看C51的寄存器使用和你的匯編里的使用匹配沒有
 
6樓: >>參與討論
shuixian
匹配了
 
7樓: >>參與討論
yharbour
你的錯(cuò)誤是什么?
 
8樓: >>參與討論
yharbour
我把你的程序考過來試了,可是全角和半角的關(guān)系編譯不了
要不你吧文件發(fā)給我看看

9樓: >>參與討論
shuixian
怎么發(fā)給你?
 
10樓: >>參與討論
yharbour
liyutang@126.com
 
11樓: >>參與討論
shuixian
已發(fā)
 
12樓: >>參與討論
yharbour
如果我沒有猜錯(cuò)的話,應(yīng)該是你輸入時(shí)使用了中文輸入法
標(biāo)點(diǎn)符號(hào)使用的是全角,所以編譯器認(rèn)不了,

13樓: >>參與討論
yharbour
我這邊的錯(cuò)誤是:
error A37: OPERATION INVALID IN THIS SEGMENT
error C100: unprintable character 0xA1 skipped


14樓: >>參與討論
shuixian
那我改過之后還是這樣啊
你的錯(cuò)誤怎么那么少?
我的很多

15樓: >>參與討論
shuixian
而且改了之后,錯(cuò)誤還是存在
 
16樓: >>參與討論
yharbour
我又上十個(gè)這樣的,錯(cuò),還有一個(gè)沒有定義變量
如果改過來了,可以再發(fā)給我看看,源碼就行

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
在線求教
詢問一個(gè)關(guān)于鍵盤的問題(請(qǐng)大家看完)
哪位有標(biāo)準(zhǔn)漢字一、二級(jí)字庫的代碼
請(qǐng)大家?guī)兔纯戳x隆的程序
[轉(zhuǎn)帖]金玉良言:給所有男人和女人的人生忠告
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)