欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3324|回復: 3
打印 上一主題 下一主題
收起左側

keil編譯錯誤(19):error C129: missing ';' before 'uint'怎樣解決!求大神指點!

[復制鏈接]
跳轉到指定樓層
樓主
ID:704348 發表于 2020-6-9 19:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>
#include <string.h>
#include <intrins.h>
#define uchar unsigned char define uint unsigned int sbit SDA=P1^0; // DS1302數據線
sbit CLK=P1^1; //DS1302時鐘線
sbit RST=P1^2; //DS1302復位線

sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;

sbit K1=P3^4; // 選擇
sbit K2=P3^5; // 加
sbit K3=P3^6; // 減
sbit K4=P3^7; // 確定

void Display_LCD_String();

uchar tCount=0;//一年中每個月的天數,2月的天數由年份決定 uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31};
uchar *WEEK[]={"SUN","MON","TUS","WEN","THU","FRI","SAT"};//周日,周一到周六

uchar LCD_DSY_BUFFER1[]={"Date 00-00-00 "}; //LCD顯示緩沖 uchar LCD_DSY_BUFFER2[]={"Time 00-00-00 "};
uchar DateTime[7]; //所讀取的日期時間
char Adjust_Index=-1; //當前調節的時間:秒,分,時,日, uchar Change_Flag[]="-MHDM-Y";



uchar Read_LCD_State();
void LCD_Busy_Wait();
void Write_LCD_Data(uchar dat);
void Write_LCD_Command(uchar cmd);
void Init_LCD();
void Set_LCD_POS(uchar p);

void DelayMS(uint x)
{
  uchar i;
  while(x--) for(i=0;i<120;i++);
}

uchar Read_LCD_State()
{
  uchar state;
  RS=0;
  RW=1;
  EN=1;
  DelayMS(1);
  state=P0;
  EN=0;
  DelayMS(1);
  return state;
}

void LCD_Busy_Wait()
{
  while((Read_LCD_State()&0x08)==0x80);
  DelayMS(5);
}

void Write_LCD_Data(uchar dat) //寫數據
{
  LCD_Busy_Wait();
  RS=1;
  RW=0;
  EN=0;
  P0=dat;
  EN=1;
  DelayMS(1);
  EN=0;
}

void Write_LCD_Command(uchar cmd)//寫命令
{
  LCD_Busy_Wait();
  RS=0;
  RW=0;
  EN=0;
  P0=cmd;
  EN=1;
  DelayMS(1);
  EN=0;
}

void Init_LCD() //LCD初始化
{
  Write_LCD_Command(0x38); DelayMS(1);
  Write_LCD_Command(0x01); DelayMS(1);
  Write_LCD_Command(0x06); DelayMS(1);
  Write_LCD_Command(0x0C); DelayMS(1);
  Display_LCD_String(0x00,"zhongzhoudaxue");
  //DelayMS(1000);
  Display_LCD_String(0x40,"dian zi ri li");
  DelayMS(2000);
}

void Set_LCD_POS(uchar p)
{
  Write_LCD_Command(p|0x80);
}

void Display_LCD_String(uchar p,uchar *s)
{
  uchar i;
  Set_LCD_POS(p);
  for(i=0;i<16;i++)
  {
    Write_LCD_Data(s[i]);
    DelayMS(1);
  }
}

/*--------------------------
向DS1302寫入一字節
---------------------------*/

void DS1302_Write_Byte(uchar x)
{
  uchar i;

  for(i=0;i<8;i++)
    {
      SDA=x&1;
      CLK=1;
      CLK=0;
      x>>=1;
    }
}

/*-------------------------------
從DS1302讀取一字節
--------------------------------*/

uchar DS1302_Read_Byte()
{
  uchar i,b,t;
  for(i=0;i<8;i++)
  {
    b>>=1;
    t=SDA;
    b|=t<<7;
    CLK=1;
    CLK=0;
  }
return b/16*10+b%16;
}

/*-------------------------------
從DS1302指定位置數據
--------------------------------*/

uchar Read_Data(uchar addr)
{
  uchar dat;
  RST=0;
  CLK=0;
  RST=1;
  DS1302_Write_Byte(addr);
  dat=DS1302_Read_Byte();
  CLK=1;
  RST=0;
  return dat;
}

/*-------------------------------
向DS1302某地址寫入數據
--------------------------------*/

void Write_DS1302(uchar addr,uchar dat)
{
  CLK=0;
  RST=1;
  DS1302_Write_Byte(addr);
  DS1302_Write_Byte(dat);
  CLK=0;
  RST=0;
}

/*------------------------------------
設置時間
------------------------------------*/

void SET_DS1302()
{
  uchar i;
  Write_DS1302(0x8e,0x00);
  for(i=0;i<7;i++)
  {
    Write_DS1302(0x80+2*i,(DateTime[i]/10<<4|(DateTime[i]%10)));
  }
Write_DS1302(0x8e,0x80);
}

/*------------------------------------

讀取當前時期時間

------------------------------------*/

void GetTime()
{
  uchar i;
  for(i=0;i<7;i++)
  {
    DateTime[i]=Read_Data(0x81+2*i);
  }
}

/*------------------------------------
時間和日期轉換成數字字符
------------------------------------*/
void Format_DateTime(uchar d,uchar *a)
{
  a[0]=d/10+'0';a[1]=d%10+'0';
}

/*------------------------------------
判斷是否為閏年
------------------------------------*/
uchar isLeapYear(uint y)
{
  return (y%4==0&&y%100!=0)||(y%400==0);
}

/*------------------------------------
星期轉換
------------------------------------*/

void RefreshWeekDay()
{
  uint i,d,w=5;

  for(i=2000;i<2000+DateTime[6];i++)
  {
    d=isLeapYear(i) ? 366 : 365;
    w=(w+d)%7;
  }
d=0;
for(i=1;i<DateTime[4];i++) d+=MonthsDays[i];
d+=DateTime[3];
DateTime[5]=(w+d)%7+1;
}

/*------------------------------------
年月日時分秒++/--
------------------------------------*/

void DateTime_Adjust(char x)
{
  switch (Adjust_Index)
  {
    case 6: //年
    if(x== 1&&DateTime[6]<99) DateTime[6]++;
    if(x==-1&&DateTime[6]>0) DateTime[6]--;
    MonthsDays[2]=isLeapYear(2000+DateTime[6])? 29:28;
    if(DateTime[3]>MonthsDays[DateTime[4]])
    DateTime[3]=MonthsDays[DateTime[4]];
    RefreshWeekDay();
    break;

    case 4: //月
    if(x== 1&&DateTime[4]<12) DateTime[4]++;
    if(x==-1&&DateTime[4]>1) DateTime[4]--;
    MonthsDays[2]=isLeapYear(2000+DateTime[6])? 29:28;
    if(DateTime[3]>MonthsDays[DateTime[4]])
    DateTime[3]=MonthsDays[DateTime[4]];
    RefreshWeekDay();
    break;

    case 3: //日
    MonthsDays[2]=isLeapYear(2000+DateTime[6])? 29:28;
    if(x== 1&&DateTime[3]<MonthsDays[DateTime[4]]) DateTime[3]++;
    if(x==-1&&DateTime[3]>0) DateTime[3]--;
    RefreshWeekDay();
    break;

    case 2: //時
    if(x== 1&&DateTime[2]<23) DateTime[2]++;
    if(x==-1&&DateTime[2]>0) DateTime[2]--;
    break;

    case 1: //秒
    if(x== 1&&DateTime[1]<59) DateTime[1]++;
    if(x==-1&&DateTime[1]>0) DateTime[1]--;
    break;
  }
}

/*------------------------------------
定時器每秒刷新LCD顯示
------------------------------------*/

void T0_INT() interrupt 1
{
  TH0=-50000/256;
  TL0=-50000%256;
  if(++tCount!=2) return;
  tCount=0;
  Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5);
  Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8);
  Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11);
  strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]-1]);

  Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5);
  Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8);
  Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11);

  Display_LCD_String(0x00,LCD_DSY_BUFFER1);
  Display_LCD_String(0x40,LCD_DSY_BUFFER2);
}

/*------------------------------------
鍵盤中斷
------------------------------------*/

void EX_INT0() interrupt 0
{
  if(K1==0) //選擇調整對象:年,月,日,時,分,秒
  {
    while(K1==0);
    if(Adjust_Index==-1||Adjust_Index==1) Adjust_Index=7;
    Adjust_Index--;
    if(Adjust_Index==5) Adjust_Index=4;
    LCD_DSY_BUFFER2[13]='[';
        LCD_DSY_BUFFER2[14]=Change_Flag[Adjust_Index];
    LCD_DSY_BUFFER2[15]=']';
  }

else
if(K2==0) // 加
  {
    while (K2==0); DateTime_Adjust(1);
  }

else
if(K3==0) // 減
  {
    while (K3==0); DateTime_Adjust(-1);
  }

else
if(K4==0) // 確定
  {
    while(K4==0);
    SET_DS1302(); //調整后的時間寫入DS1302
    LCD_DSY_BUFFER2[13]=' ';
    LCD_DSY_BUFFER2[14]=' ';
    LCD_DSY_BUFFER2[15]=' ';
    Adjust_Index=-1;
  }
}

/*------------------------------------
主程序
------------------------------------*/

void main()
{
  Init_LCD(); //LCD初始化
  IE=0x83; // 允許INT0,T0中斷
  IP=0x01;
  IT0=0x01;
  TMOD=0x01;
  TH0=-50000/256;
  TL0=-50000%256;
  TR0=1;

  while(1)
  {
    if(Adjust_Index==-1) GetTime();
  }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584814 發表于 2020-6-10 08:07 | 只看該作者
#define uchar unsigned char define uint unsigned int sbit SDA=P1^0; // DS1302數據線
改成:
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P1^0; // DS1302數據線
回復

使用道具 舉報

板凳
ID:774667 發表于 2020-6-10 09:31 | 只看該作者
man1234567 發表于 2020-6-10 08:07
#define uchar unsigned char define uint unsigned int sbit SDA=P1^0; // DS1302數據線
改成:
#define ...

對,這是幾個不同的定義,不能放在同一行進行
回復

使用道具 舉報

地板
ID:707397 發表于 2020-6-10 11:24 | 只看該作者
小老弟,define宏定義
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表