📄 main.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 + -