锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

M8单片机驱动继电器,1602液晶,按键程序

时间:2024-05-05 13:07:42


#include
#include
#define uchar unsigned char
#define uint unsigned int
///////////////////////////////////////////////////////////////
#define rs_L PORTD&=~BIT(0)
#define rs_H PORTD|=BIT(0)
#define rs_out D|=BIT(0)

#define rw_L PORTD&=~BIT(1)
#define rw_H PORTD|=BIT(1)
#define rw_out DDRD|=BIT(1)

#define en_L PORTD&=~BIT(2)
#define en_H PORTD|=BIT(2)
#define en_out DDRD|=BIT(2)

#define s1_L PORTD&=~BIT(4)
#define s1_H PORTBD|=BIT(4)
#define s1_out DDRD|=BIT(4)

#define s2_L PORTD&=~BIT(5)
#define s2_H PORTD|=BIT(5)
#define s2_out DDRD|=BIT(5)

#define s3_L PORTD&=~BIT(6)
#define s3_H PORTD|=BIT(6)
#define s3_out DDRD|=BIT(6)

#define s4_L PORTD&=~BIT(7)
#define s4_H PORTD|=BIT(7)
#define s4_out DDRD|=BIT(7)
uchar miu=0;
signed char t,tt,z,zz,a,b,c,d,e,f,g;
uchar table1[]="~00~00";
uchar table2[]="Z00~X00~z00~x0 ";
/////////////////////////////////////////////////////////////////
const table3[10]={20,40,60,80,100,120,140,160,180,200};
/////////////////////////////////////////////////////////////
void delay(uint ms)//yan shi han shu
{
uchar a;
uint b;
for(a=0;a for(b=0;b<1141;b++);
}
///////////////////////////////////////////////////////////////
uchar key_press()//pan dan an jian shi fu an xia
{
uchar j;
DDRC|=0X0f;
PORTC|=0X0f;
DDRC&=0XF0;
j=PINC;
j=j&0X0F;//00001111
if(j==0X0F)
{
return 0;
}
else
{
return 1;
}
}

//////////////////////////////////////////////////////////
void key_scan()//pan dan an xia de jian
{
uchar key;
delay(10);
if(key_press())
{
key=PINC;
key&=0X0F;
switch(key)
{
case 0X0E: //guang biao zuo yi
{
zhilin(0x0f);
miu--;
if(miu==1){zhilin(0x80+11);}
if(miu==2){zhilin(0x80+12);}
if(miu==3){zhilin(0x80+14);}
if(miu==4){zhilin(0x80+15);}

if(miu==5){zhilin(0x80+0x40+1);}
if(miu==6){zhilin(0x80+0x40+2);}
if(miu==7){zhilin(0x80+0x40+5);}
if(miu==8){zhilin(0x80+0x40+6);}
if(miu==9){zhilin(0x80+0x40+9);}
if(miu==10){zhilin(0x80+0x40+10);}
if(miu==11){zhilin(0x80+0x40+13);}
if(miu==-1){miu=12;}
}break;


case 0X0B: //guang biao you yi
{
zhilin(0x0f);
miu++;
if(miu==1){zhilin(0x80+11);}
if(miu==2){zhilin(0x80+12);}
if(miu==3){zhilin(0x80+14);}
if(miu==4){zhilin(0x80+15);}

if(miu==5){zhilin(0x80+0x40+1);}
if(miu==6){zhilin(0x80+0x40+2);}
if(miu==7){zhilin(0x80+0x40+5);}
if(miu==8){zhilin(0x80+0x40+6);}
if(miu==9){zhilin(0x80+0x40+9);}
if(miu==10){zhilin(0x80+0x40+10);}
if(miu==11){zhilin(0x80+0x40+13);}
if(miu==12){miu=0;}
}break;


case 0X0D://dui guang biao suo zai xiang, jin xin jia shu
{

if(miu==1){t++;if(t==2)t=0;zhilin(0x0c);dizhishujv((0x80+11),(0x30+t));}
if(miu==2){tt++;if(tt==10)tt=0;zhilin(0x0c);dizhishujv((0x80+12),(0x30+tt));}
if(miu==3){z++;if(z==2)z=0;zhilin(0x0c);dizhishujv((0x80+14),(0x30+z));}
if(miu==4){zz++;if(zz==2)zz=0;zhilin(0x0c);dizhishujv((0x80+15),(0x30+zz));}
if(miu==5){a++;if(a==2)a=0;zhilin(0x0c);dizhishujv((0x80+0x40+1),(0x30+a));}
if(miu==6){b++;if(b==10)b=0;zhilin(0x0c);dizhishujv((0x80+0x40+2),(0x30+b));}
if(miu==7){c++;if(c==2)c=0;zhilin(0x0c);dizhishujv((0x80+0x40+5),(0x30+c));}
if(miu==8){d++;if(d==10)d=0;zhilin(0x0c);dizhishujv((0x80+0x40+6),(0x30+d));}
if(miu==9){e++;if(e==2)e=0;zhilin(0x0c);dizhishujv((0x80+0x40+9),(0x30+e));}
if(miu==10){f++;if(f==10)f=0;zhilin(0x0c);dizhishujv((0x80+0x40+10),(0x30+f));}
if(miu==11){g++;if(g==2)g=0;zhilin(0x0c);dizhishujv((0x80+0x40+13),(0x30+g));}
}break;


case 0X07:
{
DDRC&=~BIT(4);
PORTC|=BIT(4);
//ji qi shi xv
if(t)PORTD|=BIT(6);else PORTD&=~BIT(6);//qi
////////////////////////////////////////////////////////////////
if(z)PORTD|=BIT(7);else PORTD&=~BIT(7);//zhu zhou

/////////////////////////////////////////////////////////////////////
if(a){PORTD|=BIT(4); }else PORTD&=~BIT(4);//z zou en
delay(table3[b]);
////////////////////////////////////////////////////////////
if(c)PORTD|=BIT(5);else PORTD&=~BIT(5); //x zou en
while(PINC&0x10);
delay(table3[d]);
///////////////////////////////////////////////////////////////
if(e)PORTD&=~BIT(4);else PORTD|=BIT(4); //z shou en
PORTD&=~BIT(7);
delay(table3[f]);
PORTD&=~BIT(6);
delay(table3[tt]);
///////////////////////////////////////////////////////////
if(g)PORTD&=~BIT(5);else PORTD|=BIT(5); // x shou en

}
break;


default:
key=0;
}
while(key_press());
}
}
/////////////////////////////////////////////////////////////////////
void zhilin(uchar zhi)
{
rs_H; rw_H; en_L;
rs_L; rw_L;
PORTB=zhi;
delay(1);
en_H;
delay(1);
en_L;
}
////////////////////////////////////////////////////////////////
void shujv (uchar shu)
{
rs_L; rw_H; en_L;
rs_H; rw_L;
PORTB=shu;
delay(1);
en_H;
delay(1);
en_L;
}
///////////////////////////////////////////////////////////////////
void init_lcd (void)
{
uchar e;
DDRB=0xff; PORTB=0xff;
rs_out; rw_out; en_out;

delay(1);
zhilin(0x38);
delay(1);
zhilin(0x38);
delay(1);
zhilin(0x38);
zhilin(0x38);

zhilin(0x08);
zhilin(0x01);
zhilin(0x06);
zhilin(0x0c);

zhilin(0x80+0x00);

for(e=0;e<16;e++)
{
shujv (table1[e]);
delay(1);
}
zhilin(0x80+0x40);

for(e=0;e<16;e++)
{
shujv (table2[e]);
delay(1);
}

}

void dizhishujv(uchar dizhi,uchar shu)
{
zhilin(dizhi);
shujv(shu);

}

void init_time(void) //din shi qi chu shi hua
{
TCCR1B=0X00;//wu fen pin
TC1H=0X80;//chu zhi H
TCNT1H=0X80;//chu zhi L
MSK|=BIT(2);//kai din shi qi 1 zhong dan
SREG|=BIT(7);//kai zong zhong dan

}

/////////////////////////////////////////////////////////////////////////////
void main (void)
{
init_lcd ();
init_time();
DDRD|=0xf0;
while(1)
{
key_scan();
}
}

#pragma interrupt_handler timer1:9
void timer1(void)//din shi qi 1 zhong dan
{
TCNT1H=0X80;
TCNT1H=0X80;
}


-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章