⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 water.c

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 C
字号:
 #include "iom16v.h"             //ATmega16L头文件
#define         uchar   unsigned char
#define         uint    unsigned int
//I/O 定义
#define         disp_on     3    //PA3    按钮开显示
#define         disp_off    0    //PA0    按钮关显示
#define         r485_ctr    2    //PA2    485收发控制
#define         relay_ctra  4    //PA4    继电器控制A
#define         relay_ctrb  5    //PA5    继电器控制B
#define         dot_ctr     6    //PA6    显示小数点控制
#define         relay_sts   1    //PA1  继电器状态指示

#define         run_led     5    //PC5    程序运行指示
#define         pulse_led   6    //PC6    数据脉冲指示
#define         rtc_sda     1    //PC1    时钟的数据线SDA
#define         rtc_scl     0    //PC0    时钟的SCL

#define         pulse_B     3    //PD3    采集脉冲A
#define         pulse_A     4    //PD4    采集脉冲B
#define         pulse_test   5    //PD5   采集接口状态
#define         power_sts    2    //PD2   供电状态
//变量定义
uchar    data_buffer[30];      //通讯数据缓存
uchar    water_data_hex[4];    //脉冲原始数据
uchar    water_data_disp[4];   //脉冲显示数据        
uchar    now_time[12];        //时钟,BCD
uchar    now_time_hex[6];     //时钟,HEX
uchar    time_reg;         
uchar    pulse_temp;         //采集标志字节
uchar    comm_temp;          //接收通讯标志
……
/*
子函数定义,略
……
……
……
*/

     void   main(void)
        {
       
     //I/O方向定义    1输出   0输入 
    SREG =0x00;
    DDRA = 0x74;
    DDRB = 0x00;
    DDRC = 0x63;
    DDRD = 0x02;
    //UART初始化
   UCSRB=0xd8 ;//允许发送和接收,发送和接收中断使能
   UBRRL=25  ; //  波特率9600
   UBRRH=00  ;//
   UCSRC=0x86 ;//8位数据+1位STOP位

   //TWI 初始化
      TWSR=00;
      TWBR=0x16;     //50K
//定时器2初始化
TCNT2 = 0xb1;                   //计数初值,20mS
 TIMSK = 0x40;                   // TIMER_OVF中断使能
TCCR2 = 0x07;                   // 一个计数1/1024clk,启动
       
PORTC &=~(1<<run_led);          //程序指示
display_on();                   //显示开启子函数
delay_ms(1000);
PORTC |=(1<<run_led);      
display_off();                  //显示关闭子函数
SREG=0x80;                       //总中断允许

    while(1)                         //主循环
     {
      if((PINA&(1<<disp_on)) && (!(PINA&(1<<disp_off))))     //判断显示是否需要打开
       {
       display_on();
       }
     else
       {
       display_off();
       }

    if(PIND&(1<<power_sts))        //判断供电情况
       {
       power_status=0x01 ;
       read_curren_time();          //读当前时钟
       eeprom_write(p_addr,power_status);  //保存当前电压状态
       }
     else
       {
       }
   
    if(pulse_temp==0x01)           //判断是否需要处理采集数据
       {
        pulse_data_deal();         //处理脉冲数据:脉冲+1,数值处理,保存
        }
     else
       {
       }
    
    if(comm_temp==0x01)          //判断是否收完一帧有效的通讯数据
      {
       cmd_data_deal();          //通讯处理,命令解析,执行,发送命令帧组合
       }

   }

        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -