定義全局變量count為什么編譯就過不了了?怎么解決呢
錯誤提示
Build target 'Target 1'
linking...
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: TIME
MODULE: .\Objects\main.obj (MAIN)
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?INIT_TIME?MAIN
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: COUNT
MODULE: .\Objects\main.obj (MAIN)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: COUNT
MODULE: .\Objects\main.obj (MAIN)
ADDRESS: 01D7H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: COUNT
MODULE: .\Objects\main.obj (MAIN)
ADDRESS: 01DFH
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: COUNT
MODULE: .\Objects\main.obj (MAIN)
ADDRESS: 0257H
Program Size: data=16.0 xdata=0 code=601
Target not created.
Build Time Elapsed: 00:00:02
源代碼
- #include <reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define Date P0
- sbit DSIO=P2^0;
- sbit RST=P2^4;
- sbit SCLK=P2^1;
- sbit RS = P1^0;
- sbit RW = P1^1;
- sbit EN = P2^5;
- //---DS1302寫入和讀取時分秒的地址命令---//
- //---秒分時日月周年 最低位讀寫位;-------//
- uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
- uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
- //---DS1302時鐘初始化2013年1月1日星期二12點00分00秒。---//
- //---存儲順序是秒分時日月周年,存儲格式是用BCD碼---//
- uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};
- void Ds1302Write(uchar addr, uchar dat);
- uchar Ds1302Read(uchar addr);
- void Ds1302Init();
- void Ds1302ReadTime();
- extern uchar count;
- void Ds1302Write(uchar addr, uchar dat) //向DS1302命令
- {
- uchar n;
- RST = 0;
- _nop_();
- SCLK = 0;//先將SCLK置低電平。
- _nop_();
- RST = 1; //然后將RST(CE)置高電平。
- _nop_();
- for (n=0; n<8; n++)//開始傳送八位地址命令
- {
- DSIO = addr & 0x01;//數據從低位開始傳送
- addr >>= 1;
- SCLK = 1;//數據在上升沿時,DS1302讀取數據
- _nop_();
- SCLK = 0;
- _nop_();
- }
- for (n=0; n<8; n++)//寫入8位數據
- {
- DSIO = dat & 0x01;
- dat >>= 1;
- SCLK = 1;//數據在上升沿時,DS1302讀取數據
- _nop_();
- SCLK = 0;
- _nop_();
- }
-
- RST = 0;//傳送數據結束
- _nop_();
- }
- uchar Ds1302Read(uchar addr) //讀取一個地址的數據
- {
- uchar n,dat,dat1;
- RST = 0;
- _nop_();
- SCLK = 0;//先將SCLK置低電平。
- _nop_();
- RST = 1;//然后將RST(CE)置高電平。
- _nop_();
- for(n=0; n<8; n++)//開始傳送八位地址命令
- {
- DSIO = addr & 0x01;//數據從低位開始傳送
- addr >>= 1;
- SCLK = 1;//數據在上升沿時,DS1302讀取數據
- _nop_();
- SCLK = 0;//DS1302下降沿時,放置數據
- _nop_();
- }
- _nop_();
- for(n=0; n<8; n++)//讀取8位數據
- {
- dat1 = DSIO;//從最低位開始接收
- dat = (dat>>1) | (dat1<<7);
- SCLK = 1;
- _nop_();
- SCLK = 0;//DS1302下降沿時,放置數據
- _nop_();
- }
- RST = 0;
- _nop_();
- return dat;
- }
- void Ds1302Init()
- {
- uchar n;
- Ds1302Write(0x8E,0X00); //禁止寫保護,就是關閉寫保護功能
- for (n=0; n<7; n++)//寫入7個字節的時鐘信號:分秒時日月周年
- {
- Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
- }
- Ds1302Write(0x8E,0x80); //打開寫保護功能
- }
- void Ds1302ReadTime() //讀取時鐘信息
- {
- uchar n;
- for (n=0; n<7; n++)//讀取7個字節的時鐘信號:分秒時日月周年
- {
- TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
- }
- }
- void delay(uint xms) //延遲函數
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=112;j>0;j--);
- }
- void com(uchar command) //1602寫命令
- {
- RS=0;
- RW=0;
- Date=command;
- delay(5);
- EN=1;
- delay(5);
- EN=0;
- }
- void dat(uchar date) //1602寫數據
- {
- RS=1;
- RW=0;
- Date=date;
- delay(5);
- EN=1;
- delay(5);
- EN=0;
- }
- void LCD_Init() //1602初始化
- {
- com(0x38); //LCD設置
- delay(5);
- com(0x01); //清屏
- com(0x06); //寫入新數據后光標后移一位,整屏不移動
- com(0x0c); //顯示光標,光標不顯示
- }
- void LcdDisplay()
- {
- com(0x80+0X40);
- dat('0'+TIME[2]/16); //時
- dat('0'+(TIME[2]&0x0f));
- dat('-');
- dat('0'+TIME[1]/16); //分
- dat('0'+(TIME[1]&0x0f));
- dat('-');
- dat('0'+TIME[0]/16); //秒
- dat('0'+(TIME[0]&0x0f));
- com(0x80);
- dat('2');
- dat('0');
- dat('0'+TIME[6]/16); //年
- dat('0'+(TIME[6]&0x0f));
- dat('-');
- dat('0'+TIME[4]/16); //月
- dat('0'+(TIME[4]&0x0f));
- dat('-');
- dat('0'+TIME[3]/16); //日
- dat('0'+(TIME[3]&0x0f));
- com(0x8D);
- dat('0'+(TIME[5]&0x07)); //星期
- }
- void Init_time()
- {
- TMOD = 0x01;
- TH0 = (65536-50000)/256;
- TL0 = (65536-50000)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void main()
- {
- count = 0;
- LCD_Init();
- Ds1302Init();
- while(1)
- {
- if(count>=20)
- {
- Ds1302ReadTime();
- LcdDisplay();
- }
- }
- }
- void time()interrupt 1
- {
- TH0 = (65536-50000)/256;
- TL0 = (65536-50000)%256;
- count++;
- }
復制代碼
|