欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
為什么我在用單片機P2口的某些引腳會報錯?
[打印本頁]
作者:
翼龍俠
時間:
2020-9-13 12:48
標題:
為什么我在用單片機P2口的某些引腳會報錯?
我的特殊寄存器頭文件里已經(jīng)是了這樣寫的了(下面是STC標準頭文件的IO并口定義片段)
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr P1 = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P2 = 0xA0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P3 = 0xB0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
但是,在一個工程里,其中一個頭文件這么寫就不會報錯
#define LCD_DATA P0
#define LCD_EN P27
#define LCD_RS P26
#define LCD_RW P25
LCD_w_com(uc com) /*LCD輸入指令*/
{
LCD_EN=1;
dly(1);
LCD_RS=0;
LCD_RW=0;
LCD_DATA=com;
dly(2);
LCD_EN=0;
dly(1);
LCD_EN=1;
}
LCD_w_data(uc disdat) /*LCD輸入數(shù)據(jù)*/
{
LCD_EN=1;
dly(1);
LCD_RS=1;
LCD_RW=0;
LCD_DATA=disdat;
dly(2);
LCD_EN=0;
dly(1);
LCD_EN=1;
}
LCD_init() /*LED初始化*/
{
LCD_w_com(0x38); /*00111000,功能設(shè)置*/
LCD_w_com(0x0c); /*00001100,顯示開關(guān)*/
LCD_w_com(0x06); /*00000110,輸入模式光標右移,*/
LCD_w_com(0x01); /*擦除屏幕,最簡單的命令*/
}
LCD_display(uc x,uc y,ui disdat[]) /*LCD1206顯示程序*/
{
xui i,j;
j=szof(disdat);
if(j>16)
{
rtn 1;
}
if(y==1&&y==2) /*判斷是1行還是2行*/
{
if(y==1) /*如果是第一行*/
{
LCD_w_com(0x80+x); /*指令位*/
fr(i=0;i<j;i++)
{
LCD_w_data(*disdat);
disdat++;
}
}
if(y==2) /*如果是第二行*/
{
LCD_w_com(0x80+0x40+x); /*指令位*/
fr(i=0;i<j;i++)
{
LCD_w_data(*disdat);
disdat++;
}
}
rtn 0;
}
else
{
rtn 1;
}
}
另一個頭文件,這么寫就會報錯,而且怎么弄也不行:
#define SDA P20
#define SCL P21
i2c_clk_en() /*時鐘使能函數(shù)*/
{
dly(5);
SCL=1;
dly(5);
SCL=0;
dly(5);
}
i2c_ack() /*應答位輸出*/
{
SDA=0;
i2c_clk_en();
}
i2c_start() /*啟動傳輸函數(shù)*/
{
SCL=1;
dly(1);
SDA=0; /*輸出下降沿*/
dly(2);
SCL=0;
dly(2);
}
i2c_finish() /*結(jié)束傳輸函數(shù)*/
{
SCL=0;
dly(1);
SDA=0;
dly(1)
SCL=1;
dly(2)
SDA=1;
dly(2);
}
i2c_init(ui startadd,bt wt) /*初始化函數(shù),向從機聲明器件地址、讀寫方式、和字節(jié)地址*/
{
xui i;
xui *add_p = &startadd; /**/
SDA=1;
i2c_clk_en();
SDA=0;
i2c_clk_en();
SDA=1;
i2c_clk_en();
SDA=0;
i2c_clk_en();
SDA=0;
i2c_clk_en();
i2c_clk_en();
i2c_clk_en();
if(wt==0) /*傳輸讀寫標志位*/
{
SDA=0;
i2c_clk_en();
}
else
{
SDA=1;
i2c_clk_en();
}
i2c_ack();
fr(i=0;i<8;i++) /*傳輸字節(jié)地址幀*/
{
if(i>0)
{
startadd<<1;
}
if(startadd && 0x80)
{
SDA=1;
}
else
{
SDA=0;
}
i2c_clk_en();
}
}
i2c_write_core(uc *wdats) /*存儲寫入內(nèi)核函數(shù)*/
{
xui i;
fr(i=0;i<8;i++)
{
if(i>0)
{
wdats[ i]<<1;
}
if(wdats[ i] && 0x80)
{
SDA=1;
}
else
{
SDA=0;
}
}
i2c_ack();/*數(shù)據(jù)應答位*/
}
i2c_read_core(ui datsize) /*I2C存儲器讀出內(nèi)核函數(shù)*/
{
xui i;
xui j;
xuc rdat[];
xui *pnt;
pnt=&rdat[0];
fr(j=0;j<datsize;j++) /*每循環(huán)一次發(fā)送一個字節(jié)*/
{
fr(i=0;i>8;i++) /*八個讀位循環(huán),一個字節(jié)*/
{
if(i>0)
{
rdat[j]<<1; /*頭一位不左移,其余的都左移*/
}
i2c_clk_en();
if(SDA==1) /*如果總線沒有被從機拉低*/
{
rdat[j]+1; /*則判斷為1,否則為0,加到rdat[j]的最后一位上*/
}
}
i2c_ack(); /*發(fā)送一個應答位*/
}
rtn pnt;
}
i2c_r_optr(ui startadd,ui dtsz) /*完整讀操作函數(shù)*/
{
xui i;
xuc rdat[];
xui *pnt=rdat[0];
i2c_start();
i2c_init(startadd,1);
fr(i=0;i<dtsz;i++)
{
rdat[ i]=i2c_read_core(dtsz);
}
i2c_finishi();
rtn pnt; /*返回讀出數(shù)據(jù)的指針*/
}
i2c_w_optr(ui startadd,uc *dats,ui dtsz) /*完整寫操作函數(shù)*/
{
xui j; /*定義循環(huán)變量*/
i2c_start(); /*執(zhí)行起始操作*/
i2c_init(startadd,0); /*傳遞起始讀寫地址,進行初始化*/
fr(j=0;j<dtsz;j++)
{
i2c_write_core(dats+j); /*傳遞參數(shù),進行讀出*/
}
i2c_finishi();/*返回空值*/
}
復制代碼
百思不得其解,求幫助!
作者:
hejianmin
時間:
2020-9-13 16:43
是不是你加了STC頭文件,和又寫了SRF P2
作者:
YUANYUXING
時間:
2020-9-13 19:00
I/O要先定義試試
sbit P20 = P2^0;
sbit P21 = P2^1;
#define SDA P20
#define SCL P21
作者:
翼龍俠
時間:
2020-9-13 21:27
YUANYUXING 發(fā)表于 2020-9-13 19:00
I/O要先定義試試
sbit P20 = P2^0;
sbit P21 = P2^1;
我要是沒定義還用問你嗎?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1