找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5159|回复: 1
收起左侧

atmel studio gcc程序没有通过,expected ';' before 'for' 程序报错,

[复制链接]
ID:63924 发表于 2015-2-23 20:15 | 显示全部楼层 |阅读模式
  1. /*
  2. * 能接收串口信息的带中英文硬字库的80_16点阵显示屏.c
  3. *
  4. * Created: 2015-2-14 09:07:21
  5. *  Author: Administrat<div class="blockcode"><blockquote>//-----------------------------------------------------------------
  6. //  名称:用SPI接口读写AT25F4096子程序
  7. //-----------------------------------------------------------------
  8. #define F_CPU 4000000UL
  9. #include <avr/io.h>
  10. #include <util/delay.h>
  11. #define INT8U   unsigned char
  12. #define INT16U  unsigned int
  13. #define INT32U  unsigned long

  14. //AT25F4096指令集
  15. #define WREN           0x06  //
  16. #define WRDI           0x04  //
  17. #define RDSR           0x05  //
  18. #define WRSR           0x01  //
  19. #define READ           0x03  //
  20. #define PROGRAM        0x02  //
  21. #define SECTOR_ERASE   0x52  //
  22. #define CHIP_ERASE     0x62  //
  23. #define RDID           0x15
  24. //SPI使能与禁用
  25. #define SPI_EN()(PORTB&=0xEF)
  26. #define SPI_DI()(PORTB|=0x10)
  27. //-----------------------------------------------------------------
  28. // SPI主机初始化
  29. //-----------------------------------------------------------------
  30. void SPI_MasterInit()
  31. {
  32.    //
  33.    DDRB=0b10110000;PORTB=0xFF;
  34.    //
  35.    SPCR|=_BV(SPE)|_BV(MSTR)|_BV(SPR0);
  36. }

  37. //-----------------------------------------------------------------
  38. // SPI数据传输
  39. //-----------------------------------------------------------------
  40. INT8U SPI_Transmit(INT8U dat)
  41. {
  42.    SPDR=dat;                        //
  43.    while(!(SPSR&_BV(SPIF)));        //
  44.    SPSR|=_BV(SPIF);                 //
  45.    return SPDR;                    
  46. }

  47. //-----------------------------------------------------------------
  48. // 读AT25F4096芯片状态
  49. //-----------------------------------------------------------------
  50. INT8U Read_SPI_Status()
  51. {
  52.      INT8U starus;
  53.          SPI_EN();
  54.          SPI_Transmit(RDSR);             //
  55.          starus=SPI_Transmit(0xFF);
  56.          SPI_DI();
  57.          return starus;
  58. }

  59. //-----------------------------------------------------------------
  60. // AT25F4096忙等待
  61. //-----------------------------------------------------------------
  62. void Busy_Wait()
  63. {  
  64.     while(Read_SPI_Status()&0x01);   //
  65. }

  66. //-----------------------------------------------------------------
  67. // 向AT25F4096写入三个字节的地址0x000000-0x07FFFF (有效位为19位)
  68. //-----------------------------------------------------------------
  69. void Write_3_Bytes_AT25F4096_Address(INT32U addr)
  70. {
  71.      SPI_Transmit((INT8U)(addr>>16));
  72.      SPI_Transmit((INT8U)(addr>>8));
  73.          SPI_Transmit((INT8U)(addr));
  74. }

  75. //-----------------------------------------------------------------
  76. // 从指定地址读单字节
  77. //-----------------------------------------------------------------
  78. INT8U Read_Byte_FROM_AT25F4096(INT32U addr)
  79. {
  80.     INT8U dat;
  81.         SPI_EN();
  82.         SPI_Transmit(READ);
  83.         Write_3_Bytes_AT25F4096_Address(addr);
  84.         dat=SPI_Transmit(0xFF);
  85.         SPI_DI();
  86.     return dat;
  87. }

  88. //-----------------------------------------------------------------
  89. // 从指定地址读多字节到缓冲
  90. //-----------------------------------------------------------------
  91. void Read_Some_Bytes_FROM_AT25F4096(INT32U addr, INT8U *p, INT16U len)
  92. {
  93.    INT16U i;
  94.    SPI_EN();
  95.    SPI_Transmit(READ);
  96.    Write_3_Bytes_AT25F4096_Address(addr)      //
  97.    for(i=0;i<len;i++)                         //
  98.     p[i]=SPI_Transmit(0xFF);                  //
  99.    SPI_DI();

  100. }

  101. //-----------------------------------------------------------------
  102. // 向AT25F4096指定地址写入单字节数据
  103. //-----------------------------------------------------------------
  104. void Write_Byte_TO_AT25F4096(INT32U addr,INT8U dat)
  105. {       
  106.     SPI_EN();
  107.         SPI_Transmit(WREN);                       //
  108.         SPI_DI();
  109.     Busy_Wait();
  110.         SPI_EN();
  111.         SPI_Transmit(PROGRAM);                    //
  112.         Write_3_Bytes_AT25F4096_Address(addr)     //
  113.         SPI_Transmit(dat);                        //
  114.         SPI_DI();
  115.         Busy_Wait();
  116. }
复制代码

and
*/
//-----------------------------------------------------------------
//  名称: 能接收串口信息的带中英文硬字库的80*16点阵显示屏
//-----------------------------------------------------------------
//  说明: 本例运行时,点阵屏将滚动显示一组固定信息
//        当接收到串口发送来的中英文/全角/半角字符时,点屏将开始
//        滚动显示所接收到的信息.
//----------串口发送待显示中英文字符的操作说明----------
//A. 在串口助手中输入 ## 加回键后发送时点阵显示屏将被清空
//B. 输入一串汉字或英文字符后一定要在后面按下回车键,然后再点击发送按钮
//C. ##可以单独出现,也可以在一串文字开头或中间某位置出现,##前的内容将被清除
//D. 注意在虚拟串口软件VSPD中设置COM3,COM4对连,且注意参数一致
//E. 本例运行需要安装并配置VSPD
//F. 512K字节EEPROM中存放有:
//1. 16*16点阵中文字库
//2. 8*16点阵英文字库
//
//-----------------------------------------------------------------
#define F_CPU 4000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>
#include <stdio.h>
#include <util/delay.h>
#define INT8    signed   char
#define INT8U   unsigned char
#define INT16U  unsigned int
#define INT32U  unsigned long

//74595及74154相关引脚定义
#define DS         PA0   //
#define SH_CP      PA1
#define ST_CP      PA2
#define E1_74HC154 PC7
//74595及74154相关引脚操作
#define DS_1()     PORTA|= _BV(DS)
#define DS_0()     PORTA&=~_BV(DS)
#define SH_CP_1()  PORTA|=~_BV(SH_CP)
#define SH_CP_0()  PORTA&=~_BV(SH_CP)
#define ST_CP_1()  PORTA|=~_BV(ST_CP)
#define ST_CP_0()  PORTA&=~_BV(ST_CP)
//74154译码器使能与禁止
#define EN_74HC154() PORTC&=~_BV(E1_74HC154)
#define EN_74HC154() PORTC|= _BV(E1_74HC154)
//SPI相关函数
extern void SPI_MasterInit
extern void Read_SPI_Some_Bytes_FROM_AT25F4096(INT32U addr,INT8U*p,INT16U len);
//最多可接收的汉字个数
#define MAX_WORD_COUNT 50
//开始时待显示的中英文字符串
//及从串口接收的中英文数字等字符信息都将覆盖保存到bMsg中
struct MSG
{
        INT8U  Buffer[MAX_WORD_COUNT*2 + 2];
        INT16U Len;
} bMsg;

//缓冲可保存汉字点阵数据的最大汉字个数(如果为半角字符则*2)
#define MAX_DOT_WORD_COUNT 20
//待显示汉字点阵数据缓冲
INT8U WORD_Dots_Buffer[MAX_DOT_WORD_COUNT * 32];
//------------------------------------------------------------------
// USART初始化
//------------------------------------------------------------------
void Init_USART()
{
  UCSRB=_BV(RXEN)|_BV(RXCIE);
  UCSRC=_BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0);
  UBRRL=(F_CPU/9600/16-1)%256;
  UBRRH=(F_CPU/9600/16-1)%256;
}

//-----------------------------------------------------------------
// 串行输入子程序
//-----------------------------------------------------------------
void Serial_Input_595(INT8U dat)
{
   INT8U i;
   for (i=0x80;i!=0x00;i>>=1)
   {
      if(dat&i)DS_1();else DS_0();
      SH_CP_0();_delay_us(2);
      SH_CP_1();_delay_us(2);
    }
}
//-----------------------------------------------------------------
// 并行输出子程序
//-----------------------------------------------------------------
void Parallel_Output_595()
{
   ST_CP_0();_delay_us(1);
   ST_CP_1();_delay_us(1);
}

//-----------------------------------------------------------------
// 根据bMsg.Buffer,从硬字库读取全角或半角字符点阵数据并完成必要转换
//-----------------------------------------------------------------
void Read_SPI_Word_Dot_Matrix_AND_Convert()
{
INT16U i,j=0,k;
INT32U Offset;
INT8U SectionCode,PlaceCode;
INT8U Temp_Buf[32];
for(i=0;i<MAX_DOT_WORD_COUNT*32;i++)
WORD_Dots_Buffer=0x00;
i=0;
while(i<bMsg.Len)
{
   if (bMsg.Buffer>0xA0)
   {
        //
                SectionCode=bMsg.Buffer    - 0xA0;
                PlaceCode=bMsg.Buffer[i+1]    - 0xA0;
                //
                Offset=(94L*(SectionCode -1)+(PlaceCode -1))*32L;
                //
                Read_Some_Bytes_FROM_AT25F4096(Offset,Temp_Buf,32);
                //
                //
                for (k=0;k<16;k++)
                {
                    WORD_Dots_Buffer[j+k] =Temp_Buf[2*k];
                    WORD_Dots_Buffer[j+k+16]=Temp_Buf[2*k+1];
                }
            //
                    //
                    //
                j+=32;i+=2
   }
   else
   {
           //
           //
           offset=267616L+bMsg.Buffer*16;
           Read_Some_Bytes_FROM_AT25F4096(Offset,WORD_Dots_Buffer+j,16);
           //
           //
           //
           j+=16;i++;
          
   }       
  }
}   
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
int main()
{
   INT8U i,j,z,d=0;
   DDRA=0xFF;PORTA=0xFF;
   DDRC=0xFF;PORTC=0xFF;
   DDRD=0x02;PORTD=0xFF;
   //
   strcpy((char*)bMsg.Buffer,"点阵演示v1.0...")
   bMsg.Len=strlen((char*)bMsg.Buffer);
   SPI_MasterInit();
   Init_USART()
   sei()
   //
   while()
   {
           for(z=0;z<=bMsg.Len-10;z++)
           {
                    for(d=0;d<10;d++)
                        {
                                for(i=0;i<16;i++)
                                {
                                //
                                    for(j=0;j<5;j++)
                                        {
                                                Serial_Input_595(WORD_Dots_Buffer[z*16+j*32+i+16]);
                                                Serial_Input_595(WORD_Dots_Buffer[z*16+j*32+i]);
                                        }
                                        DI_74HC154();
                                        Parallel_Output_595();
                                        PORTC=(PORTC&0xF)|i;
                                        EN_74HC154();
                                        _delay_ms(2);
                                }                                                                                  
                        }                                                
                }
        }
}                                                                
//-----------------------------------------------------------------
// 串口接收中断函数
//-----------------------------------------------------------------
ISR (USART_RXC_vect)
{
    //
        INT8U c=UDR;
        //
        if(c=='\r')return;
        //
        if (c=='\n')
        {
        //
        Read_SPI_Word_Dot_Matrix_AND_Convert();
        return;
        }
        //
        if(bMsg.Len<MAX_WORD_COUNT*2)bMsg.Buffer[bMsg.Len++]=c;
        //
        if (bMsg.Len>=2&&bMsg.Buffer[bMsg.Len-1]=='#'
                       &&bMsg.Buffer[bMsg.Len-2]=='#')
        {
             bMsg.Len=0;
        }

}





编译器提示有2项错误,一处警告:
错误:Error        1        expected ';' before 'for'        I:\资料\能接收串口信息的带中英文硬字库的80×16点阵显示屏\能接收串口信息的带中英文硬字库的80×16点阵显示屏\AT25F4096.c        100        4        能接收串口信息的带中英文硬字库的80×16点阵显示屏
Error        3        expected ';' before 'SPI_Transmit'        I:\资料\能接收串口信息的带中英文硬字库的80×16点阵显示屏\能接收串口信息的带中英文硬字库的80×16点阵显示屏\AT25F4096.c        118        2        能接收串口信息的带中英文硬字库的80×16点阵显示屏



警告:Warning        2        unused variable 'i' [-Wunused-variable]        I:\资料\能接收串口信息的带中英文硬字库的80×16点阵显示屏\能接收串口信息的带中英文硬字库的80×16点阵显示屏\AT25F4096.c        96        11        能接收串口信息的带中英文硬字库的80×16点阵显示屏




大神们班我看一下有什么问题,可以吗




程序编译

程序编译

提示信息

提示信息

新建文件夹 (2).zip

10.9 KB, 下载次数: 8

程序附件

回复

使用道具 举报

ID:193550 发表于 2017-4-25 19:54 | 显示全部楼层
向大神膜拜!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表