📄 ps2_study.c
字号:
#include<iom16v.h>
#include <macros.h>
#include "ps2_study_data.h"
unsigned char data_key[3];
unsigned char flag_1=1,flag_del=0,flag_char1=0,key_i=1,flag_a=0,flag_w=0,flag_b=0,flag_c=0,
flag_d=0,flag_e=0,flag_f=0,flag_g=0,flag_h=0,flag_i=0,
flag_j=0,flag_k=0,flag_l=0,flag_n=0,flag_m=0,flag_o=0,
flag_p=0,flag_q=0,flag_r=0,flag_s=0,flag_t=0,flag_u=0,
flag_v=0,flag_ww=0,flag_x=0,flag_y=0,flag_z=0,flag_esc=0;
unsigned char y_station,rig=0,LR=0,wed1=1,flag_L_R=0,flag_error=0,
flag_over=0,flag_rig,flag_score=0,flag_enter=0,flag_time0=0,
flag_cout=0,flag_ts=0;
signed char x_station;
unsigned int flag_ms=0;
////////////////////////////////
#define start 34;
char extern xc=start;
unsigned char const *data_num[10]={&num0[0],&num1[0],&num2[0],&num3[0],
&num4[0],&num5[0],&num6[0],&num7[0],&num8[0],&num9[0]};
unsigned char num_data=0,test_num=0;
unsigned char key_ok=1;
////////////////////////////////
#define data_DDR DDRA
#define data_OUT PORTA
#define data_in PINA
#define COMMAND_OUT PORTD
#define COMMAND_DDR DDRD
#define CS1 PD2
#define CS2 PD3
#define D_I PD4
#define R_W PD5
#define E PD6
#define COMMAND_INI() COMMAND_DDR|=0X7C
#define SET_CS1() COMMAND_OUT |=(1<<CS1)
#define SET_CS2() COMMAND_OUT |=(1<<CS2)
#define SET_D_I() COMMAND_OUT |=(1<<D_I)
#define SET_R_W() COMMAND_OUT |=(1<<R_W)
#define SET_E() COMMAND_OUT |=(1<<E)
#define CLR_CS1() COMMAND_OUT &=~(1<<CS1)
#define CLR_CS2() COMMAND_OUT &=~(1<<CS2)
#define CLR_D_I() COMMAND_OUT &=~(1<<D_I)
#define CLR_R_W() COMMAND_OUT &=~(1<<R_W)
#define CLR_E() COMMAND_OUT &=~(1<<E)
#define BUSY 0X80
#define LCD_ON 0X3F
#define LCD_OFF 0X3E
#define DIS_X 0X40
#define DIS_Y 0XB8
#define MAX_X 0X3F
#define MAX_Y 0X07
#define LEFT 0X00
#define RIGHT 0X01
#define page1 0xb8
#define page2 0xb9
#define page3 0xba
#define page4 0xbb
#define page5 0xbc
///////////////////////////////////////////////////////////////
void LCD_Test(char L_R)
{
data_DDR=0x00;
if(L_R)
{
SET_CS1();
CLR_CS2();
}
else
{
SET_CS2();
CLR_CS1();
}
CLR_D_I();
SET_R_W();
SET_E();
Delaynus(2);
while(data_in & BUSY)
;
CLR_E();
data_DDR=0XFF;
}
///////////////////////////////////////////////////////////////////
void LCD_write (unsigned char data,char L_R)
{
LCD_Test(L_R);
SET_D_I();
CLR_R_W();
SET_E();
data_OUT=data;
CLR_E();
}
void LCD_write_command(unsigned char data,char L_R)
{
LCD_Test(L_R);
CLR_D_I();
CLR_R_W();
SET_E();
data_OUT=data;
CLR_E();
}
void LCD_write_data( char x ,char y,unsigned char data,char L_R)//设置xy地址
{
LCD_Test(L_R);
x=DIS_X | (x & MAX_X);
y=DIS_Y | (y & MAX_Y);
//x=x | 0x40;
//y=y |0xb8;
if(L_R)
{
SET_CS1();
CLR_CS2();
}
else
{
SET_CS2();
CLR_CS1();
}
LCD_write_command(x,L_R);//设置x,y的地址
LCD_write_command(y,L_R);
//LCD_write(data,L_R);
}
//////////////////////////////
void LED_ini(void)
{
char i,j;
COMMAND_INI();
data_DDR=0XFF;
LCD_write_command(LCD_OFF,LEFT);
LCD_write_command(LCD_OFF,RIGHT);
LCD_write_command(LCD_ON,LEFT);
LCD_write_command(LCD_ON,RIGHT);
LCD_write_command(0xc0,LEFT);
LCD_write_command(0xc0,RIGHT);
}
void LCD_clear(void)
{
char i, j;
for (i = 0; i < MAX_Y + 1; i++)
{
LCD_write_page(0, i, MAX_X, 0x00, LEFT, 0);
LCD_write_page(0, i, MAX_X, 0x00, RIGHT, 0);
}
}
void LCD_write_page(char x, char y, unsigned char end, unsigned char data, char L_R, char over)
{
char i;
if (over == 0)
{
LCD_write_data(x, y, data, L_R);
for (i = 0; i < end - x+1; i++)
{
LCD_write(data, L_R);
}
}
else
{
LCD_write_data(x, y, ~data, L_R);
for (i = 0; i < end - x; i++)
{
LCD_write(~data, L_R);
}
}
}
////////////////////////////////////////////////////////////////////////////
void Delaynus(unsigned int k)
{
char i, j, m;
for (m = 0; m < 8; m++)
{
for (i = 0; i < k; i++)
{
//for (j = 0; j < 150; j++);
;
}
}
}
//////////////////////////////////////////////////////
void Delaynms(unsigned int k)
{
char i, j, m;
for (m = 0; m < 8; m++)
{
for (i = 0; i < k; i++)
{
for (j = 0; j < 150; j++);
}
}
}
//////////////////////////////////
void Delay_key(unsigned char k)
{
unsigned char i, j, m;
for (i = 0; i < k; i++)
{
for (j = 0; j < 8; j++)
{
for (m = 0; m < 150; m++);
}
}
}
void LCD_China(char x, char y, unsigned char const *data, char L_R)
{
char i;
LCD_write_data(x, y, *data, L_R);
for (i = 0; i < 16; i++)
{
LCD_write(*(data + i), L_R);
}
LCD_write_data(x, y + 1, *(data + 16), L_R);
for (i = 16; i < 32; i++)
{
LCD_write(*(data + i), L_R);
}
}
///////////////////////////////////////////////
void LCD_China_ini(char x, char y, unsigned char const *data, char L_R)
{
char i,j,p=0;
LED_ini();
for(j=0;j<4;j++)
{
LCD_write_data(x, y+j, *(data+p), L_R);
for (i = p; i < p+32; i++)
{
LCD_write(*(data + i), L_R);
}
p=p+32;
}
}
//////////////////////////////////////////////////////////////////////
void LCD_char(char x,char y,unsigned char const *data,char L_R)
{
char i;
LCD_write_data(x, y, *data, L_R);
for (i = 1; i < 8; i++)
{
LCD_write(*(data + i), L_R);
}
LCD_write_data(x, y + 1, *(data + 8), L_R);
for (i = 9; i < 16; i++)
{
LCD_write(*(data + i), L_R);
}
}
/*void LCD_pic(char x,char y,unsigned char const *data,char L_R)
{
int i,j;
int p=0;
LED_ini();
for(j=0;j<8;j++)
{
LCD_write_data(x, y+j, *(data+p), L_R);
for (i = p; i < p+64; i++)
{
LCD_write(*(data + i), L_R);
}
p=p+64;
}
}*/
/////////////////////////////////////////////////////////////
void return_last(unsigned char n)
{
LCD_China(0,n,fan,0);
LCD_China(17,n,hui,0);
LCD_China(33,n,qing3,0);
LCD_China(49,n,an,0);
LCD_char(20,n,EE,1);
LCD_char(28,n,s,1);
LCD_char(36,n,c,1);
}
//////////////////////////////////////////////////////////////////////////
void Meu_ini(void)
{
char i=0;
LCD_write_command(0xc0, 0);//初始化x,y地址
LCD_write_command(0xc0, 1);//初始化x,y地址
LCD_China_ini(0,4,zhao,0);
LCD_China_ini(32,4,qing,0);
LCD_China_ini(0,4,xue,1);
LCD_China_ini(32,4,yuan,1);
while (17 != i)
{
Delaynms(90);
LCD_write_command(0Xc0 | i, 0);
LCD_write_command(0Xc0 | i, 1);
i++;
}
LCD_China(1,8,dian,0);
LCD_China(22,8,zhi,0);
LCD_China(43,8,xin,0);
LCD_China(1,8,xi,1);
LCD_China(22,8,gong,1);
LCD_China(43,8,cheng,1);
while (32!= i)
{
Delaynms(90);
LCD_write_command(0Xc0 | i, 0);
LCD_write_command(0Xc0 | i, 1);
i++;
}
LCD_China(40,10,cai,0);
LCD_China(0,10,chu,1);
LCD_China(23,10,bin,1);
i = 24;
while (i--)
{
Delaynms(90);
}
LCD_clear();
LCD_write_command(0Xc0, 0);
LCD_write_command(0Xc0, 1);
}
//////////////////////////////////////////////////////
void usart_init(void)
{
UCSRB=0X00;
UCSRC=(1<<URSEL)|(1<<UMSEL)|(1<<UPM0)|(1<<UPM1)|(3<<UCSZ0);
//UCSRC=BIT(URSEL)|0x06|(1<<UPM1)|(1<<UPM0);//设置数据位数
///UBRRH=0x33;//set band
//UBRRL=0X00;
UBRRH=0x00;//set band
UBRRL=0X27;
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//数据接收和发送允许,接收完成中断允许
//SEI();
}
void time0_init(void)
{
//TCCR0=(1<<CS00);//8分频
TCCR0=0x00;//8分频
TCNT0=0X38;
TIMSK=(1<<TOIE0);
}
////////////////////////////////
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
flag_time0++;
if(flag_time0==5)
{
flag_time0=0;
flag_ms++;
if(flag_ms==1000)
{
flag_ms=0;
flag_ts++;
}
}
TCNT0 = 0x38;//reload counter value
}
/////////////////////////////////////////////////////
void char_display(void)
{
if(flag_char1==1)
{
LCD_clear();
LCD_char(9,0,b,0);
LCD_char(27,0,d,0);
LCD_char(36,0,e,0);
LCD_char(54,0,g,0);
LCD_char(9,4,i,0);
LCD_char(18,4,j,0);
LCD_char(36,4,l,0);
LCD_char(54,4,m,0);
LCD_char(9,0,p,1);
LCD_char(18,0,q,1);
LCD_char(27,0,r,1);
LCD_char(45,0,t,1);
LCD_char(54,0,u,1);
LCD_char(9,4,w,1);
LCD_char(18,4,x,1);
LCD_char(27,4,y,1);
if(wed1==2)
{
LCD_char(0,0,c,0);
//LCD_char(9,0,b,0);
LCD_char(18,0,f,0);
// LCD_char(27,0,d,0);
//LCD_char(36,0,e,0);
LCD_char(45,0,a,0);
// LCD_char(54,0,g,0);
LCD_char(0,4,v,0);
// LCD_char(9,4,i,0);
//LCD_char(18,4,j,0);
LCD_char(27,4,h,0);
//LCD_char(36,4,l,0);
LCD_char(45,4,o,0);
//LCD_char(54,4,m,0);
LCD_char(0,0,n,1);
// LCD_char(9,0,p,1);
// LCD_char(18,0,q,1);
// LCD_char(27,0,r,1);
LCD_char(36,0,k,1);
// LCD_char(45,0,t,1);
// LCD_char(54,0,u,1);
LCD_char(0,4,s,1);
// LCD_char(9,4,w,1);
// LCD_char(18,4,x,1);
// LCD_char(27,4,y,1);
//LCD_char(36,4,z,1);
//LCD_char(45,4,o,1);
// LCD_char(54,4,x,1);
//LCD_char(0,4,v,1);
flag_char1=0;
flag_w=1;
}
if(wed1==1)
{
LCD_char(0,0,z,0);
// LCD_char(9,0,b,0);
LCD_char(18,0,s,0);
//LCD_char(27,0,d,0);
// LCD_char(36,0,e,0);
LCD_char(45,0,n,0);
// LCD_char(54,0,g,0);
LCD_char(0,4,o,0);
// LCD_char(9,4,i,0);
// LCD_char(18,4,j,0);
LCD_char(27,4,v,0);
// LCD_char(36,4,l,0);
LCD_char(45,4,f,0);
// LCD_char(54,4,m,0);
LCD_char(0,0,h,1);
// LCD_char(9,0,p,1);
// LCD_char(18,0,q,1);
//LCD_char(27,0,r,1);
LCD_char(36,0,c,1);
// LCD_char(45,0,t,1);
// LCD_char(54,0,u,1);
LCD_char(0,4,k,1);
// LCD_char(9,4,w,1);
// LCD_char(18,4,x,1);
// LCD_char(27,4,y,1);
//LCD_char(36,4,z,1);
//LCD_char(45,4,o,1);
// LCD_char(54,4,x,1);
//LCD_char(0,4,v,1);
flag_char1=0;
flag_w=1;
}
}
wed1++;
if(wed1==3)
{
wed1=1;
}
}
void key(void)
{
if(data_key[key_i-1]==0x5a)//enter
{
if(flag_enter==1)
{
TCCR0=0x00;
flag_score=1;
flag_over=1;
//flag_enter=0;
flag_char1=0;
}
if(flag_enter==0)
{
flag_1=0;
flag_char1=1;
x_station=0;
y_station=2;
flag_error=0;
flag_over=0;
LR=0;
rig=0;
key_i=1;
flag_enter=1;
char_display();
flag_ts=0;
flag_cout=0;
flag_ms=0;
flag_time0=0;
TCNT0=0X38;
TCCR0=(1<<CS01);//8分频
}
data_key[1]=0;
data_key[2]=0;
}
if((data_key[key_i-1]==0x76)&(flag_w==1))//esc
{
//if(data_key[3]==0xe0)
{
flag_esc=1;
flag_1=0;
flag_char1=1;
x_station=0;
y_station=2;
flag_error=0;
flag_over=0;
flag_score=0;
LR=0;
rig=0;
char_display();
key_i=1;
flag_ts=0;
flag_cout=0;
flag_ms=0;
flag_time0=0;
TCNT0=0X38;
TCCR0=(1<<CS01);//8分频
}
}
if(flag_over==0)
{
if((data_key[key_i-1]==0x71)&(flag_w==1))///del
{
//if(data_key[3]==0xe0)
{
flag_del=1;
key_i=1;
}
}
if((data_key[key_i-1]==0x1c)&(flag_w==1))///a
{
flag_a=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x32)&(flag_w==1))///b
{
flag_b=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x21)&(flag_w==1))///c
{
flag_c=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x23)&(flag_w==1))///d
{
flag_d=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x24)&(flag_w==1))///e
{
flag_e=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x2b)&(flag_w==1))///f
{
flag_f=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x34)&(flag_w==1))///g
{
flag_g=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x33)&(flag_w==1))///h
{
flag_h=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x43)&(flag_w==1))///i
{
flag_i=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x3b)&(flag_w==1))///j
{
flag_j=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x42)&(flag_w==1))///k
{
flag_k=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x4b)&(flag_w==1))///l
{
flag_l=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x31)&(flag_w==1))///n
{
flag_n=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x3a)&(flag_w==1))///m
{
flag_m=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x44)&(flag_w==1))///o
{
flag_o=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x4d)&(flag_w==1))///p
{
flag_p=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x15)&(flag_w==1))///q
{
flag_q=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x2d)&(flag_w==1))///r
{
flag_r=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x1b)&(flag_w==1))///s
{
flag_s=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x2c)&(flag_w==1))///t
{
flag_t=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x3c)&(flag_w==1))///u
{
flag_u=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x2a)&(flag_w==1))///v
{
flag_v=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x1d)&(flag_w==1))///ww
{
flag_ww=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x22)&(flag_w==1))///x
{
flag_x=1;
flag_cout++;
key_i=1;
}
if((data_key[key_i-1]==0x35)&(flag_w==1))///y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -