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

📄 main.c

📁 ATMEGA8-lcdd在flash 存贮中应用-学习AVR的朋友们挺多的
💻 C
字号:
#include "dis_void.h"
#define uchar unsigned char
#define uint unsigned int 
#define sbi(x,y) (x|=(1<<y))
#define cbi(x,y)  (x&=~(1<<y))

  

unsigned char timer=0;
unsigned char count=0; 		//AD转换结果
unsigned int loop=0,s=0;
unsigned char key_val=0,key_flag=0;

/*--  文字:  一  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
static unsigned char yi[] PROGMEM = {
                 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x01,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa};



static unsigned char icon[] PROGMEM  ={
                 /*--  宽度x高度=16x16  --*/
0x00,0x08,0x14,0x2A,0x14,0x08,0x00,0x7F,0x7F,0xC3,0xC3,0xC3,0xC3,0xC3,0xFB,0x39,
0x3C,0x3F,0x03,0x03,0x03,0x03,0x03,0x3E,0x3E,0x03,0x03,0x03,0x03,0x03,0xFF,0xFC};


void adc_init(void)		//ADC初始化
{
 DDRF=0x00;
 PORTF=0x00;
 ADCSRA =0x00; 		//设置前,先关闭ADC
 ADMUX|=(1<<REFS0); 
 ACSR=(1<<ACD);     //关闭模拟比较器
 ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);	//64分频
}




void uart0_init(void)
      {
	  UCSR0B=0X00;
	  UBRR0L=0X33;
	  UCSR0B=0X98;
	  }

void sendchar(unsigned char c)
      {
	  UDR0=c;
	  while(!(UCSR0A&0X40));
	  UCSR0A|=0X40;  
	  }


void  send(unsigned char const *str)
{ 
   while(1)
   {  if( *str == '\0' ) break;
      sendchar(*str++);	    // 发送数据
   }
}


SIGNAL(SIG_OVERFLOW1)
      {
	  TCNT1=64900;
       
	timer++;
	if(timer>=100)   //〈256  //改变时间
	   {
	   PORTD=0xff^PORTD;   //改变引脚
	   timer=0;
	   }
	  }
/*
void debug_P(const char *addr)
{
char c;
while ((c = pgm_read_byte(addr++)))
sendchar(c);
}
*/
//(pgm_read_byte(&icon[loop]))



void disp_paly()
     {
	 delay(100);
set_startline(s);
s++;
if(s>=64)
   s=0;
set_adr(0,0);
for(loop=0;loop<16;loop++)
{
delay(500);
wdata(inva((pgm_read_byte(&icon[loop]))),1,1);
}
for(loop=16;loop<64;loop++)
{
wdata(0,1,1);
}

set_adr(1,0);
for(loop=0;loop<64;loop++)
{
wdata(0,1,1);
}

for(loop=16;loop<32;loop++)
{
wdata(inva((pgm_read_byte(&icon[loop]))),1,1);
}
	 
	 }

unsigned char key(void)
    {
	if((PINA&0x01)==0)
	  {
	  return 0x14 ;
	  }
	if((PINA&0x02)==0)
	  {
	   return 0x10;
	  }
	if((PINA&0x04)==0)
	  {
	   return 0x12;
	  }
  ////////////////////////  

	if((PINE&0x04)==0)
	  {
	   return 0x0C;
	  }
	 if((PINE&0x08)==0)
	  {
	   return 0x09;
	  }
	if((PINE&0x10)==0)
	  {
	   return 0x06;
	  }
	if((PINE&0x20)==0)
	  {
	   return 0x03 ;
	  }
	if((PINE&0x40)==0)
	  {
	   return 0x11; 
	  }
	 if((PINE&0x80)==0)
	  {
	   return 0x13;
	  }
//////////////////////////
 ////////////////////////  
   	if((PINB&0x01)==0)
	  {
	   return 0x0B;
	  }
   	if((PINB&0x02)==0)
	  {
	   return 0x07;
	  }
	if((PINB&0x04)==0)
	  {
	   return 0x04;
	  }
	 if((PINB&0x08)==0)
	  {
	   return 0x01;
	  }
	if((PINB&0x10)==0)
	  {
	   return 0x0A;
	  }
	if((PINB&0x20)==0)
	  {
	   return 0x08;
	  }
	if((PINB&0x40)==0)
	  {
	   return 0x05;
	  }
	 if((PINB&0x80)==0)
	  {
	  return 0x02;
	  }
//////////////////////////
return 0;

	}

int main (void)
{
const unsigned char  SEND_STRING[] = "welcome to avr\n";
unsigned int adc_rel=0;

	DDRC=0xff;//数据口
	PORTC=0xff;  
    DDRA=0xf8;//控制口//低三位为按键
	PORTA=0xff;  

 	DDRD=0xff;
	PORTD=0xff;   


    DDRE=0x00;//按键
	PORTE=0xff;  

 	DDRB=0x00;
	PORTB=0xff;  



 sei();
 adc_init();
	 TCCR1A=0X00;
	 TCCR1B=(1<<CS10);
	 TIMSK|=(1<<TOIE1);//a64
 //    TIMSK1|=(1<<TOIE1);//a64
     TCNT1=61712;
 uart0_init(); 
send(SEND_STRING);
dison_off(1);
clr_disp();
while(1)
    { 
   key_val=key();
   if(key_val==0)
     {
	 key_flag=1;
	 }
  if((key_flag)&(key_val!=0))
     {
	  if(key_val!=0)
	    {
	    sendchar(key_val);
		}
    key_flag=0;
      }
	disp_paly();

	 if(key_val==1) 
	  {
	   delay(1000);
	   ADMUX= ADMUX&0xf0;
	   delay(1000);
       ADCSRA|=(1<<ADSC);                                  //启动ADC转换
       while(ADCSRA& (1<<ADSC));                           //判断ADC转换是否结束
       adc_rel=ADC; 
       count=adc_rel*10/102;
       sendchar(count);
       }  
/////////////////////////

	 if(key_val==2) 
	   {
	     delay(1000);
       ADMUX= ADMUX&0xf0;
      delay(10);
       ADMUX|= ADMUX+3;
       delay(1000);
       ADCSRA|=(1<<ADSC);                                  //启动ADC转换
      while(ADCSRA& (1<<ADSC));                           //判断ADC转换是否结束
       adc_rel=ADC; 
      count=adc_rel*10/102;
      sendchar(count);
      }

	
	
	 // delay(50000);	

  /*
  for(count=0;count<32;count++ )
     {
     sendchar((pgm_read_byte(&yi[count])));
     delay(50000);	
     } 
	 */

	 }
	
	return (0); 
}



⌨️ 快捷键说明

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