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

📄 -ͦ

📁 手把手教你学AVR单片机C程序设计实验程序
💻
字号:
#include <iom16.h>			//包含头文件
#include <inavr.h>
#include<intrinsics.h>
#include "lcd1602_8bit.c"
#define uchar unsigned char	//变量类型的宏定义
#define uint  unsigned int	
#define D8_0  (PORTB=PORTB&0x7f)	//端口定义
#define D8_1  (PORTB=PORTB|0x80)
#define S1 (PIND&0x10)
#define S2 (PIND&0x20)
#define S3 (PIND&0x40)
#define S4 (PIND&0x80)
#define INT1 (PIND&0x08)
#define time 200
/*******************************/
uchar __flash str0[]={" Hello everyone "};//待显字符串
uchar __flash str1[]={" EEPROM Testing "};//待显字符串
uchar __flash str2[]={"                "};
uchar __flash str3[]={"  Set password  "};//待显字符串
uchar __flash str4[]={" Input password "};//待显字符串
uchar a[9],b[9];
uchar cnt,flag,s;
#define CLR_LCM(x,y); {for(s=x;s<16;s++)DisplayOneChar(s,y,0x20);}
/*******************************/
void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0xFF;
 PORTB = 0xFF;
 DDRB  = 0xFF;
 PORTC = 0x00; 
 DDRC  = 0x03;
 PORTD = 0xFF;
 DDRD  = 0x00;
}
//******************************************
void main(void)				// 定义主函数
{
uchar val=0,i,status=0;	
port_init();
Delay_nms(400);
InitLcd();
ePutstr(0,0,str0); //第一行显示
ePutstr(0,1,str1); //第二行显示
for(i=0;i<9;i++)
{__EEGET(a[i],i+100);Delay_nms(20);}
__EEGET(flag,200);Delay_nms(20);
Delay_nms(2000);
ePutstr(0,0,str2);
ePutstr(0,1,str2);
/********************************************/
  while(1)               //无限循环
  {
        switch (status)
        {
        case 0:ePutstr(0,0,str2);
               ePutstr(0,1,str2);
               if(S3==0){while(S3==0);if(flag==88)status=10;cnt=0;}
               if(S4==0){while(S4==0);status=30; }
               Delay_nms(time);
               break;
        case 10:ePutstr(0,0,str4); //第一行显示
               if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S3==0){while(S3==0);status=11;b[0]=val;}
               CLR_LCM(1,1);
               DisplayOneChar(0,1,val+0x30);
               Delay_nms(time);
               break;
	case 11:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S3==0){while(S3==0);status=12;b[1]=val;}
               if(INT1==0){while(INT1==0);status=10;val=b[0];}
               CLR_LCM(2,1);
               DisplayOneChar(1,1,val+0x30);    
               Delay_nms(time);
                break;
        case 12:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S3==0){while(S3==0);status=13;b[2]=val;}
               if(INT1==0){while(INT1==0);status=11;val=b[1];}
               CLR_LCM(3,1);
               DisplayOneChar(2,1,val+0x30);    
               Delay_nms(time);
                break;
	case 13:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S3==0){while(S3==0);status=14;b[3]=val;}
               if(INT1==0){while(INT1==0);status=12;val=b[2];}
               CLR_LCM(4,1);
               DisplayOneChar(3,1,val+0x30);
               Delay_nms(time);
                break;        
        case 14:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S3==0){while(S3==0);status=15;b[4]=val;}
               if(INT1==0){while(INT1==0);status=13;val=b[3];}
               CLR_LCM(5,1);
               DisplayOneChar(4,1,val+0x30);  
               Delay_nms(time);
                break;
	case 15:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S3==0){while(S3==0);status=16;b[5]=val;}
               if(INT1==0){while(INT1==0);status=14;val=b[4];}
               CLR_LCM(6,1);
               DisplayOneChar(5,1,val+0x30);  
               Delay_nms(time);
                break;        
        case 16:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S3==0){while(S3==0);status=17;b[6]=val;}
               if(INT1==0){while(INT1==0);status=15;val=b[5];}
               CLR_LCM(7,1);
               DisplayOneChar(6,1,val+0x30);    
               Delay_nms(time);
                break;
	case 17:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S3==0){while(S3==0);status=18;b[7]=val;}
               if(INT1==0){while(INT1==0);status=16;val=b[6];}
               CLR_LCM(8,1);
               DisplayOneChar(7,1,val+0x30);  
               Delay_nms(time);
                break;       
        case 18:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S3==0){while(S3==0);status=19;b[8]=val;}
               if(INT1==0){while(INT1==0);status=17;val=b[7];}
               CLR_LCM(9,1);
               DisplayOneChar(8,1,val+0x30);
               Delay_nms(time);
                break;        
        case 19:if(cnt==0)
              { 
                for(i=0;i<9;i++)
                {
                  if(a[i]==b[i]){cnt++;}
                }
              }  
              if(cnt==9){D8_0;}
               else D8_1;
               Delay_nms(5000);
               D8_1;status=0;cnt=0;val=0;
               break; 	
     //-----------------------------------------------------------
        case 30:ePutstr(0,0,str3); //第一行显示
               if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S4==0){while(S4==0);status=31;a[0]=val;}
               CLR_LCM(1,1);
               DisplayOneChar(0,1,val+0x30);
               Delay_nms(time);
                break;
	case 31:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S4==0){while(S4==0);status=32;a[1]=val;}
               if(INT1==0){while(INT1==0);status=30;val=a[0];}
               CLR_LCM(2,1);
               DisplayOneChar(1,1,val+0x30);     
               Delay_nms(time);
                break;
        case 32:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S4==0){while(S4==0);status=33;a[2]=val;}
               if(INT1==0){while(INT1==0);status=31;val=a[1];}
               CLR_LCM(3,1);
               DisplayOneChar(2,1,val+0x30);     
               Delay_nms(time);
                break;
	case 33:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S4==0){while(S4==0);status=34;a[3]=val;}
               if(INT1==0){while(INT1==0);status=32;val=a[2];}
               CLR_LCM(4,1);
               DisplayOneChar(3,1,val+0x30);    
               Delay_nms(time);
                break;        
        case 34:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S4==0){while(S4==0);status=35;a[4]=val;}
               if(INT1==0){while(INT1==0);status=33;val=a[3];}
               CLR_LCM(5,1);
               DisplayOneChar(4,1,val+0x30);    
               Delay_nms(time);
                break;
	case 35:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S4==0){while(S4==0);status=36;a[5]=val;}
               if(INT1==0){while(INT1==0);status=34;val=a[4];}
               CLR_LCM(6,1);
               DisplayOneChar(5,1,val+0x30);     
               Delay_nms(time);
                break;        
        case 36:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S4==0){while(S4==0);status=37;a[6]=val;}
               if(INT1==0){while(INT1==0);status=35;val=a[5];}
               CLR_LCM(7,1);
               DisplayOneChar(6,1,val+0x30);     
               Delay_nms(time);
                break;
	case 37:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S4==0){while(S4==0);status=38;a[7]=val;}
               if(INT1==0){while(INT1==0);status=36;val=a[6];}
               CLR_LCM(8,1);
               DisplayOneChar(7,1,val+0x30);    
               Delay_nms(time);
                break;   
        case 38:if(S1==0){if(val<9)val++;}
               if(S2==0){if(val>0)val--;}
               if(S4==0){while(S4==0);status=39;a[8]=val;}
               if(INT1==0){while(INT1==0);status=37;val=a[7];}
               CLR_LCM(9,1);
               DisplayOneChar(8,1,val+0x30);     
               Delay_nms(time);
                break;  
        case 39:for(i=0;i<9;i++)
                {__EEPUT(i+100,a[i]);Delay_nms(10);}
                flag=88;__EEPUT(200,flag); 
                Delay_nms(time);
                status=0;val=0;
                break; 
        default:break;
        }	
    }
}

⌨️ 快捷键说明

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