2492|0

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

大家帮忙看下 到底怎么解决 程序是对的 可就是编译不能通过(辛苦大家了) [复制链接]

//***********************************************************************
//                        包含文件
//***********************************************************************

#include
#include
#define         F_CPU        7372800                // 单片机主频为7.3728MHz,用于延时子程序
#include
#include
#include
#include    //中断信号头文件

//***********************************************************************
//                        定义变量区
//***********************************************************************

#define Data_IO                PORTA                //数码管数据口
#define Data_DDR        DDRA                 //数码管数据口方向寄存器
#define D_LE0                PORTD &= ~(1 << PD4) //数码管段控制位为0,锁存端口数据
#define D_LE1           PORTD |= (1 << PD4)  //数码管段控制位为1,锁存器输出与端口一致
#define W_LE0                PORTD &= ~(1 << PD5) //数码管位控制位为0
#define W_LE1           PORTD |= (1 << PD5)  //数码管位控制位为1


#define delay_us(x)     _delay_us(x)    //AVR GCC延时函数 x(us)
#define delay_ms(x)     _delay_ms(x)    //AVR GCC延时函数 x(ms)


#define uchar           unsigned char
#define uint            unsigned int
#define ulong           unsigned long

#define baud           9600                                     //设置波特率的大小
#define baud_setting   (uint)((ulong)F_CPU/(16*(ulong)baud)-1)  //波特率计算公式
#define baud_h         (uchar)(baud_setting>>8)                 //提取高位
#define baud_l         (uchar)(baud_setting)                    //低位


uint   tx_count=200,tx_flag=0xff;
static uchar A1,A2,A3;                                 
uchar usart_tx_data;
uchar usart_rx_data;

//***********************************************************************
//                        共阴数码管显示的断码表0~F
//***********************************************************************

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//***********************************************************************
//                        IO端口初始化
//***********************************************************************

void system_init()
{
    Data_IO=0xFF;             //数据口为输出
    Data_DDR=0xFF;

    PORTD=0xFF;               //74HC573的控制口,设置为输出
    DDRD=0xFF;
}

//*************************************************************************
//                        74HC573控制数码管动态扫描显示函数,显示采集到的温度
//*************************************************************************

void Display_Uart(uint data_b,uint data_s,uint data_g)
{
         uchar i,j;
         system_init();
     j=0x01;                    //此数据用来控制位选
for(i=0;i<5;i++)               //用后3位数码管来显示
  {
     D_LE1;                     
     W_LE1;                     
     Data_IO=~j;               
     W_LE0;                     
         j=(j<<1);
     Data_IO=0x00;           
     D_LE0;                     
     delay_ms(1);               
  }
     D_LE1;                    
     W_LE1;                    
     Data_IO=~j;               
     W_LE0;                    
         j=(j<<1);
     Data_IO=table[A1];         
     D_LE0;                    
     delay_ms(1);              

     D_LE1;                     
     W_LE1;                     
     Data_IO=~j;               
     W_LE0;                     
         j=(j<<1);
     Data_IO=table[A2];            
     D_LE0;                     
     delay_ms(1);   
         
         D_LE1;                     
     W_LE1;                     
     Data_IO=~j;               
     W_LE0;                     
         j=(j<<1);
     Data_IO=table[A3];            
     D_LE0;                     
     delay_ms(1);                                      

}


void usart_init()
{
  UCSR1A=0x00;                                 //单倍速模式
  UCSR1B=0xF8;                                 //接收中断和发送中断允许                              
  UCSR1C=(1<   UBRR1H=baud_h;                               //写波特率的值
  UBRR1L=baud_l;
}

//*************************************************************************
//                数据处理函数
//*************************************************************************
void data_do(uchar temp_d)
{
     uchar A2t;
     A1=temp_d/100;                       //分出百,十,和个位
     A2t=temp_d%100;
     A2=A2t/10;
     A3=A2t%10;
}

//*************************************************************************
//                串口相关中断服务子程序
//*************************************************************************
                                     //数据发送结束中断向量
SIGNAL(SIG_USART1_TRANS)             //中断服务程序
{
   delay_ms(10);                   //相关操作
}

                                   //数据接收结束中断向量
SIGNAL(SIG_USART1_RECV)            //中断服务程序
{
    usart_rx_data=UDR1;            //将接收到的数据取出
    data_do(usart_rx_data);                   //数据处理,得到个位十位百位
       
}
                                  //数据寄存器空中断向量
SIGNAL(SIG_USART1_DATA)           //中断服务程序
{

   UDR1=usart_tx_data;           //发送数据到数据寄存器
   tx_count--;
   if(tx_count==0x00)
   {
   tx_flag=0x01;
   UCSR1B=0xF0;                 //禁止发送
   }
}


//*************************************************************************
//                        主程序
//*************************************************************************
void main()
{
  system_init();                             //系统初始化
  usart_init();                              //usart串口初始化配置
  usart_tx_data=0xff;
  SREG|=0x80;                                //开启全局中断
  while(1)
  {  
     SREG=0x00;                               //关中断,PD口做IO口用,才能正常显示数码管
         Display_Uart(A1,A2,A3);                  //显示接收到的数据   
         SREG|=0x80;                              //开中断,用于下次接收中断
  }
}

捕获.PNG (11 KB, 下载次数: 0)

错误报告

错误报告
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表