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