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

📄 -ͦ

📁 手把手教你学AVR单片机C程序设计实验程序
💻
字号:
#include <iom16.h>
#include"RW_EEPROM.h"
#include<intrinsics.h>
#include "lcd1602_8bit.c"
#define GET_BIT(x,y) (x&(1<<y))
#define S1 4
#define S2 5
#define S3 6
#define S4 7
#define uchar unsigned char	//变量类型的宏定义
#define uint  unsigned int	
uchar status;
uint eepromaddress;
uchar x,y;			//定义全局变量
uchar __flash title[]={"EEPROM R/W TEST "};
uchar __flash title1[]={"  INPUT VALUE   "};
uchar __flash title2[]={" INPUT ADDRESS  "};
uchar __flash title3[]={" WRITE VALUE  "};
uchar __flash title4[]={" READ VALUE   "};
//*************************************
void port_init(void)		//端口初始化子函数
{							
 PORTA = 0xFF;				// PA端口初始化输出11111111
 DDRA  = 0xFF;				//将PA端口设为输出
 PORTB = 0xFF;				// PB端口初始化输出11111111
 DDRB  = 0xFF;				//将PB端口设为输出
 PORTC = 0xFF; 				// PC端口初始化输出11111111
 DDRC  = 0xFF;				//将PC端口设为输出
 PORTD = 0xFF;				// PD端口初始化输出11111111
 DDRD  = 0xFF;				//将PD端口设为输出
}							
//*************************************
void main(void)				//定义主函数
{
port_init();
Delay_nms(400);
InitLcd();
ePutstr(0,0,title);
Delay_nms(2000);
while(1)			//无限循环 
{
  switch(status)
  {
  case 0: ePutstr(0,0,title1);
          if(GET_BIT(PIND,S4)==0){status++;Delay_nms(250);}
          if(status>3)status=0;
         //----------------------------
          if(GET_BIT(PIND,S1)==0)	//如果按键S1按下
          {
           if(x<255)x++;		//变量x递增,最大值为255
           Delay_nms(250);
          }
          //---------------------------
          if(GET_BIT(PIND,S2)==0)	//如果按键S2按下
          {
            if(x>0)x--;		//变量x递增,最小值为0
            Delay_nms(250);
          }
         DisplayOneChar(0,1,(x/100)+0x30);Delay_nms(10); 
         DisplayOneChar(1,1,((x%100)/10)+0x30);Delay_nms(10);  
         DisplayOneChar(2,1,(x%10)+0x30);Delay_nms(10);  
         break;
   case 1:ePutstr(0,0,title2);
          if(GET_BIT(PIND,S4)==0){status++;Delay_nms(250);}
          if(status>3)status=0;
          //---------------------------
          if(GET_BIT(PIND,S1)==0)	//如果按键S1按下
          {
           if(eepromaddress<511)eepromaddress++;//变量递增,最大值为511
           Delay_nms(250);
          }
          //---------------
          if(GET_BIT(PIND,S2)==0)	//如果按键S2按下
          {
            if(eepromaddress>1)eepromaddress--;//变量x递增,最小值为1
            Delay_nms(250);
          }
          DisplayOneChar(13,1,(eepromaddress/100)+0x30);Delay_nms(10);  
          DisplayOneChar(14,1,((eepromaddress%100)/10)+0x30);Delay_nms(10);  
          DisplayOneChar(15,1,(eepromaddress%10)+0x30);Delay_nms(10);  
          break; 
   case 2:ePutstr(0,0,title3); 
          if(GET_BIT(PIND,S4)==0){status++;Delay_nms(250);}
          if(status>3)status=0;
          //----------------------
          if(GET_BIT(PIND,S3)==0)
          {WRITE_EEPROM(eepromaddress,x);Delay_nms(10);
          DisplayOneChar(14,0,'O');Delay_nms(10);  
          DisplayOneChar(15,0,'K');Delay_nms(10); 
          Delay_nms(100);
          DisplayOneChar(14,0,' ');Delay_nms(10);  
          DisplayOneChar(15,0,' ');Delay_nms(10); 
          } //如果按键S3按下,
          //将变量x写入ATmegal6L内部EEPROM的123单元
          break;  
   case 3:ePutstr(0,0,title4); 
          if(GET_BIT(PIND,S4)==0){status++;Delay_nms(250);}
          if(status>3)status=0;
          //------------------------
          if(GET_BIT(PIND,S3)==0)
          {y=READ_EEPROM(eepromaddress);Delay_nms(10);
          DisplayOneChar(14,0,'O');Delay_nms(10);  
          DisplayOneChar(15,0,'K');Delay_nms(10);  
          Delay_nms(100);
          DisplayOneChar(14,0,' ');Delay_nms(10);  
          DisplayOneChar(15,0,' ');Delay_nms(10); 
          } //如果按键S3按下,
          //从ATmegal6L内部EEPROM的200单元中读出数据至变量y中
          DisplayOneChar(5,1,(y/100)+0x30);Delay_nms(10);  
          DisplayOneChar(6,1,((y%100)/10)+0x30);Delay_nms(10);  
          DisplayOneChar(7,1,(y%10)+0x30);Delay_nms(10);  
          break;  
  default:break;
  }
}
}

⌨️ 快捷键说明

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