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

📄 +_-

📁 avr单片机icc写的密码锁
💻
字号:
//#include <iom16v.h> 
//#include <macros.h>
//#pragma  interrupt_handler  miao9:9
//#pragma  interrupt_handler  miao2:2
//液晶命名
//#define  uchar unsigned char
//#define  uint  unsigned int

//#define SET_PSB PORTA|=BIT(3)
//#define CLR_PSB PORTA&=~BIT(3)

#define SET_CS PORTA|=BIT(4)
#define CLR_CS PORTA&=~BIT(4)

#define SET_SID PORTA|=BIT(5)
#define CLR_SID PORTA&=~BIT(5)

#define SET_SCLK PORTA|=BIT(6)
#define CLR_SCLK PORTA&=~BIT(6)
/****************************************************************
               微秒延时                          
*****************************************************************/

void delay(uint US)		  
{
 uint i;
 US=US*5/4;		  	 //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
 for( i=0;i<US;i++); 
}
/****************************************************************
               毫秒延时                          
*****************************************************************/

void delay_ms(uint ms)
{
   uint i,j;
   for(i=0;i<ms;i++)
     {
	   for(j=0;j<1141;j++);
	 }
}
/****************************************************************
                端口初始化                        
*****************************************************************/

void port_init12864()
{
   DDRA|=BIT(4)|BIT(5)|BIT(6);     //设定a口输出
   PORTA&=0X8F;    //a口输出低
                  
   //DDRB=0XFF;     //设定b口输出
   //PORTB=0X00;    //输出低
   
   SET_CS;        //片选
   //SET_SCLK;

}
/****************************************************************
                液晶屏初始化                         
*****************************************************************/

void lcd_init12864()
{
   //CLR_PSB;          //当PSB为低时 液晶处于串行数据模式
   write_com12864(0x30);  //功能设定:8位接口控制位,基本指令集
   delay(5);
   write_com12864(0x0C);  //显示开关设置:整体显示开,游标显示关,正常显示
   delay(5);
   write_com12864(0x01);  //清除显示 
   delay(5);
}

/*****************************************************************
               字节传送,一个字节一个传
******************************************************************/
void sendbyte12864(uchar byte)
{
uint  t;
  for(t=8;t>0;t--)
   {
      CLR_SCLK;
	  if(byte & BIT(t-1)) SET_SID;
	  else  CLR_SID;
      delay(2);
      SET_SCLK;
   }

}
/****************************************************************
                  写指令函数                   
*****************************************************************/	

void write_com12864(uchar com)
{  
   //SET_CS;
   sendbyte12864(0xf8);  //定义写指令写命令
   delay(2);
   sendbyte12864(com&0xf0);//先写高四位
   delay(2);
   sendbyte12864(com<<4); //接写低四位
   delay(2);
   //CLR_CS;
}
/****************************************************************
                   写字数据指令                       
*****************************************************************/

void write_dat12864(uchar dat)
{  
   //SET_CS;
   sendbyte12864(0xfa);
   delay(2);
   sendbyte12864(dat&0xf0);
   delay(2);
   sendbyte12864(dat<<4);
   delay(2);
  //CLR_CS;
}
/****************************************************************
                    液晶定位函数                     
*****************************************************************/

void lcd_pos12864(uchar y,uchar x)
{
   switch(y)
   {
      case 0: write_com12864(0x80+x);break;
      case 1: write_com12864(0x90+x);break;
      case 2: write_com12864(0x88+x);break;
      case 3: write_com12864(0x98+x);break;
      default:break;
   }

}
/****************************************************************
                12864的写字符串函数                          
*****************************************************************/
void writeString12864(uchar * str)
{
   uchar i = 0;
   while(str[i] != '\0')//判断是否是字符串结束符
   {
      write_dat12864(str[i++]);
   }
}
/****************************************************************
               画图函数  逐行,顺向,8*16
****************************************************************/
void drawpic12864(const uchar *p)
{
   uchar i, j, k ;
   write_com12864(0x36);          //扩充指令集动作
   delay(2);
   write_com12864(0x36);
   delay(2);
   write_com12864(0x3e);			 //找开绘图显示功能
   delay(2);
   write_com12864(0x01);			 //清屏
   for(i=0;i<32;i++)     	 //画上半屏  32行点阵
   {
	  write_com12864(0x80+i);  	 //设定 DDRAM 位址到位址计数器(AC) 写每行点阵都要先写这个指令
	  write_com12864(0x80);
	  for(j=0;j<16;j++)   	 //每个字节8个点 16*8=128个点  所以上面画了128*32个点
	  {
	     write_dat12864(*p++);
	  }
   }
   for(i=0;i<32;i++)  	  	 //画下半屏
   {
	  write_com12864(0x80+i);
	  write_com12864(0x88);
	  for(j=0;j<16;j++)
	  {
	     write_dat12864(*p++);
	  }
   }
}

//port_init();
//lcd_init();

⌨️ 快捷键说明

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