📄 lock.c
字号:
#include "lock.h"
void write_dat_320240(INT8U data)
{
unsigned int i;
check_busy_320240();
//for(i=0;i<1000;i++); //根据速度来调整延时
PORTD =data;
dat_320240;
cs_320240;
wr_320240;
for(i=0;i<500;i++);
nwr_320240;
ncs_320240;
}
void write_com_320240(INT8U com)
{
unsigned int i;
check_busy_320240();
//for(i=0;i<1000;i++); //根据速度来调整延时
PORTD =com;
com_320240;
cs_320240;
wr_320240;
for(i=0;i<500;i++);
nwr_320240;
ncs_320240;
}
void check_busy_320240(void)
{
unsigned int temp=0x40;
while(temp&40)
{
dat_320240;
cs_320240;
re_320240;
TRISD = 0x40; //D6
temp= LCD_DAT;
nre_320240;
}
TRISD = 0x0; //D6
ncs_320240;
}
//系统设置参数,8个参数
unsigned int system_para[]={0x30,0x87,0x07,0x27,0x2b,0xf0,0x28,0x00};
//显示区域设置参数,10个参数
unsigned int scroll_para[]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};
void LCD320240_Init(void)
{
INT8U i;
i=0;
ncs_320240;
dat_320240;
nre_320240;
nwr_320240;
write_com_320240(0x40); /*初始化,显示窗口设置命令*/
for(i=0;i<8;i++) /*写初始化参数*/
{
write_dat_320240(system_para[i]);
}
write_com_320240(0x44); /*设置显示区域命令*/
for(i=0;i<10;i++) /*写显示区域设置参数*/
{
write_dat_320240(scroll_para[i]);
}
write_com_320240(0x5a); /*设置点单元卷动位置命令*/
write_dat_320240(0x00);
write_com_320240(0x5b); /*设置合成显示方式命令*/
write_dat_320240(0x00); /*设置参数:一三区为文本属性,二重"或"合成*/
write_com_320240(0x5d); /*设置光标形状*/
write_dat_320240(0x0f);
write_dat_320240(0x8f);
clear_screen_320240(); /*清屏*/
write_com_320240(0x59); /*DISP ON/OFF 命令*/
write_dat_320240(0x55); /*设置参数:显示一~四区开显示,光标闪 */
}
#define uint unsigned int
void Line(uint row1, uint col1, uint row2, uint col2, uint style)
{
uint i,n;
Set_Grap_Addr(row1,col1); //设置图形区域地址
if(row1==row2)
{
Cursor_Move('R');
n=col2-col1;
lcd_write_com(0x42);
for(i=0;i<n;i++)
{
if(style==1)
{
lcd_write_dat(0xff);
}
else if(style==2)
{
lcd_write_dat(0xa6);
}
else if(style==3)
{
lcd_write_dat(0xaa);
}
}
}
else if(col1==col2)
{
Cursor_Move('D');
n=row2-row1;
lcd_write_com(0x42);
for(i=0;i<n;i++)
{
lcd_write_dat(0x01);
}
}
}
void Display_8_16(uint row, uint col, uint *string)
{
uint strlen; //字符串长度变量
uint temp_char; //临时显示字符变量
uint i,j; //显示字符循环变量
i=0;
strlen=0;
Set_Grap_Addr(row,col); //设置图形显示区域显示地址
Cursor_Move('D');
//得到*string的长度
while(string[strlen]!=0x00)
{
strlen++;
}
/*显示*string*/
for(i=0;i<strlen;i++)
{
Set_Grap_Addr(row,col);
temp_char=string[i];
if( (temp_char>=0x20) && (temp_char<=0x7f) ) //判断是否为可显示字符
{
lcd_write_com(0x42); //数据写入显示缓冲区命令
for(j=0;j<16;j++) //显示一个字符
{
lcd_write_dat(ASC_MSK[(temp_char-0x20)*16+j]);
}
}
else {break;}
col++;
}
}
void Display_37_37(uint row, uint col, uint *string)
{
uint i,j;
Cursor_Move('R'); //光标移动方向向右
for(i=0;i<37;i++)
{
Set_Grap_Addr(row,col); //设置图型地址
lcd_write_com(0x42);
for(j=0;j<5;j++)
{
lcd_write_dat(string[i*2+j]);
}
row++;
}
}
void re_array()
{
int temp,i,j;
for(i=0;i<6;i++)
{
loop: temp=random(10);
for(j=0;j<i;j++)
if(array_key[i]==temp)
goto loop; //若获取的随机值等于以前的,则重新获取
array_key[i]=temp; //保存随机值
}
lcd_refresh();
}
void lcd_refresh()
{
draw_outline(); //绘制外框
draw_arry(); //绘制随机数组
draw_3key(); //绘制三个汉字按键"确定""后退""取消"
draw_window(); //绘制密码输入框
}
void spi_write(char data)
{
int8 i = 7;
uint8 mask[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
for(; i >= 0; i--) {
SPI_CLK_LOW;
if( (data & mask[i]) >> i) ==1)
SPI_DAT_HIGHT;
else
SPI_DAT_LOW
delay_ms(10); /*等待适当的时间,以等待数据稳定*/
SPI_CLK_HIGHT;
delay_ms (10);
}
uint ad7843_x(void)
{
spi _write(0x90); //将S标志位置一,表示使能传输
return spi_read();
}
uint ad7843_ y(void)
{
spi_write (0x0d0); //将S标志位置一,表示使能传输
return spi_read();
}
uint average(unsigned int value[10])
{
unsigned int max,min,i,ave=0,sum=0;
max = value[0];
min = value[0];
for(i=0;i<10;i++) //比较法 确定最大值和最小值
{
if(max<value[i])
max=value[i];
if(min>value[i])
min=value[i];
sum+=value[i];
}
ave=(sum-min-max)/8; //求平均值
return ave;
}
int input_num(int x,int y)
{
int num;
if( (x>=5 && x<=55) && (y>=5 && y<=55) ) num = 1;
if( (x>=65 && x<=115) && (y>=5 && y<=45) ) num = 2;
if( (x>=125 && x<=175) && (y>=5 && y<=45) ) num = 3;
........ //此处省略判断分支,读者可自行加上
return num;
}
int process_confirm()
{
int i,j;
for(i=0;i<6;i++)
if(input_key[i]!=store_key[i])
{
for(i=0;i<6;i++)
input_key[i]=0; //清空密码缓存区
point_i=0; //归零
return 0; //若密码不对,则返回0
}
return 1; //若密码全对,则返回1
}
void process_input(int intput)
{
input_key[point_i]=array_key[input]; // array_key用来保存密码排列
point_i++; //point_i是全局变量,用来保存指向的密码
}
void process_backspace()
{
point_i--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -