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

📄 child.c

📁 一个单片机的完整开发程序AVR的
💻 C
字号:
#include <iom8v.h>
#include <macros.h>
#include "head.h"

void delay_us(unsigned char us) //when the xtal is 8M, the delay time is 1 us.
{
  do
  {
   	us--;
  	asm("nop");
	asm("nop");
	asm("nop");
	asm("nop");
  }while(us);
}

void delay_ms(unsigned char ms)
{
  unsigned int i;
  do
  {
   ms--;
   for(i=0;i<5;i++)
   delay_us(200);
  }while(ms);
}

void send_cmd(unsigned char cmd)  //send comend to the lcd.
{
 	unsigned char i,mod;
	clr_cs;
	mod=0x80;
	for(i=0;i<3;i++)
	{
	 	if((mod&0x80)==0x80)
			set_data;
		else
			clr_data;
		
		clr_wr;
		delay_us(8);
		set_wr;
		mod=mod<<1;
		delay_us(8);
	 }
	mod=cmd;
	for(i=0;i<9;i++)
	{
		if((mod&0x80)==0x80)
			set_data;
		else
			clr_data;
		clr_wr;
		delay_us(8);
		set_wr;
		mod=mod<<1;
		delay_us(8);
	}
	set_cs;
}

//send data and address to the lcd.

void send_data(unsigned char addr,unsigned char data)
{
 	unsigned char i,mod;

	clr_cs;	
	mod=0x05;    //entern the write mode.
	for(i=0;i<3;i++)
	{
	 	if((mod&0x01)==0x01)
			set_data;
		else
			clr_data;
		
		clr_wr;
		delay_us(8);
		set_wr;
		mod=mod>>1;
		delay_us(8);
	}
	mod=addr;
	for(i=0;i<6;i++)
	{	
	 	if((mod&0x01)==0x01)
			set_data;
		else
			clr_data;
		clr_wr;
		delay_us(8);
		set_wr;
	 	mod=mod>>1;
		delay_us(8);
	}
		
	mod=data;
	for(i=0;i<8;i++)
	{   
	 	if((mod&0x01)==0x01)
			set_data;
		else
			clr_data;
		clr_wr;
		delay_us(8);
		set_wr;
		mod=mod>>1;
		delay_us(8);
	 }
		set_cs;
}
//initialize the lcd.
void init_lcd(void)
{
	 send_cmd(0x18);
	 send_cmd(0x01);
	 send_cmd(0x03);
	 send_cmd(0x29);
}
//display full screen or clear the screen.
void display(unsigned char data)
{
 	unsigned char i,k;
	k=0;
	for(i=0;i<16;i++)
	{
	 	send_data(k,data);
		k++;
		k++;
	}
}

unsigned char key_scan(void)
{
 unsigned char key,key_num;
 key_num=0;
 DDRC=0x77;
 DDRB|=BIT(PB5);
 DDRD=0x97;
 PORTB&=~BIT(PB5);
 PORTC|=BIT(PC0);
 PORTC|=BIT(PC1);
 _NOP();
 _NOP();
 key=((PIND&0x68)>>3);
 if(key!=0x0D)
 {
  	delay_ms(40);
	key=((PIND&0x68)>>3);
	if(key!=0x0D)
 	{
 	   switch(key)
 	   {
  	     case 0x0C: key_num=1;break;
  		 case 0x09: key_num=2;break;
  		 case 0x05: key_num=3;break;
  		 default: break;
 	   }
     key=((PIND&0x68)>>3);
	 while(key!=0x0D)
	 {
	 delay_ms(5);
	 key=((PIND&0x68)>>3);
	 }
	}
   }
 PORTB|=BIT(PB5);
 PORTC&=~BIT(PC0);
 PORTC|=BIT(PC1);
 _NOP();
 _NOP();
 key=((PIND&0x68)>>3);
 if(key!=0x0D)
 {
  	delay_ms(40);
	key=((PIND&0x68)>>3);
	if(key!=0x0D)
 	{
 	   switch(key)
 	   {
  	      case 0x0C: key_num=4;break;
   		  case 0x09: key_num=5;break;
  		  case 0x05: key_num=6;break;
  		  default: break;
 		}
	 key=((PIND&0x68)>>3);
	 while(key!=0x0D)
	 {
	 delay_ms(5);
	 key=((PIND&0x68)>>3);
	 }
	}
   }
 PORTB|=BIT(PB5);
 PORTC|=BIT(PC0);
 PORTC&=~BIT(PC1);
 _NOP();
 _NOP();
 key=((PINB&0x68)>>3);
 if(key!=0x0D)
 {
  	delay_ms(40);
	key=((PIND&0x68)>>3);
	if(key!=0x0D)
 	{
 	  switch(key)
 	  {
  	    case 0x0C: key_num=7;break;
  		case 0x09: key_num=8;break;
  		case 0x05: key_num=9;break;
  		default: break;
 	  }
  	 key=((PIND&0x68)>>3);
	 while(key!=0x0D)
	 {
	 delay_ms(5);
	 key=((PIND&0x68)>>3);
	 }
	}
   }
 return key_num;
}

⌨️ 快捷键说明

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