51單片機
keil給了一個警告:*** WARNING L10: CANNOT DETERMINE ROOT SEGMENT網上說是main寫錯了,但是我寫對了呀,為什么還有這個警告。
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit DU = P2^6
sbit WE = P2^7;
sbit LED1 =P1^0;//led1
void delay (uint z)//自定義的延時函式
{
uint x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
void display(uint i)
{
uchar bai,shi,ge;
bai=i/100;
shi=i%100/10;
ge=i%10;
P0=0xff;//清除斷碼
WE = 1;//打開位選鎖存器 高電平打開
P0 = 0xfe;
WE = 0;//鎖存位選資料 低電平關閉
DU = 1;//打開段選鎖存器
P0 = tabel[bai];
DU = 0;//鎖存段選資料
delay(10);
P0=0xff;//清除斷碼
WE = 1;//打開位選鎖存器 高電平打開
P0 = 0xfd;
WE = 0;//鎖存位選資料 低電平關閉
DU = 1;//打開段選鎖存器
P0 = tabel[shi];
DU = 0;//鎖存段選資料
delay(10);
P0 = 0xff;//清除斷碼
WE = 1;//打開位選鎖存器 高電平打開
P0 = 0xfb;//1111 1101
WE = 0;//鎖存位選資料 低電平關閉
DU = 1;//打開段選鎖存器
P0 = tabel[ge];// 顯示2
DU = 0;//鎖存段選資料
delay(10);
}
/*定時器1做計數器,作業模式2,使用定時器0讓LED1小燈100毫秒閃爍一次,
定時器1記錄LED1閃爍次數,并且用數碼管實時顯示計數數值。*/
//定時器0初始化函式
void timer0Init()
{
TR0=1;//啟動定時器0
TMOD|=0x05;
TH0=0;
TL0=0;
}
//定時器1初始化函式 使用定時計數器1來計數
void timer1Init()
{
TR1=1;//啟動定時器0
TMOD|=0x10;//啟動定時器1作業模式1,16位定時模式
TH1=0x4b;
TL1=0xfd;
}
void main(void)
{
uchar msec=0,sec=0;//毫秒 秒
timer0Init();//定時器0初始化
timer1Init();//定時器1初始化
while(1)
{
if(TF1==1)
{
TF1=0;//軟體清零標志位
TH1=0x4b;
TL1=0xfd;
msec++;
if(msec==10)//
{
msec=0;
LED1=~LED1; //產生方波
}
delay(500);
LED1= ~LED1;
display(TL0);
}
}
}
uj5u.com熱心網友回復:
樓主,我用keil編譯了一下,只提示缺少;的錯誤sbit DU = P2^6
sbit WE = P2^7;
沒有出現WARNING L10
uj5u.com熱心網友回復:
難道是我新建工程錯了?

我要被這玩意給弄暈了(=_=)
uj5u.com熱心網友回復:
我再試試看。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/227399.html
標籤:單片機/工控
下一篇:電腦玩和平精英跟手機組隊的方法
