📄 max531.c
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay1ms(uint);
//uchar keyscan(void);
//void getscan();
/****max531引脚定义***/
sbit din531=P1^0;
sbit clk531=P1^1;
sbit cs531=P1^2;
/***4乘4引脚定义***/
uchar keyascan[2];
uchar wordbuf[6]; // 字型码缓冲区
uchar count,key; // 位计数
/*****1602引脚定义***/
sbit RS=P3^7;
sbit RW=P3^6;
sbit EN=P3^5;
//uchar JS[5]={0X30,0X30,':',0X30,0X30};
unsigned char code str1[]={"setdy:"};
unsigned char code str2[]={"nowgl:"};
//unsigned char code str3[]={"OK"};
//unsigned char code str4[]={"HOT"};
//unsigned char code str5[]={"COOL"};
//uchar data disdata[5];
/************MAX531D/A转换************/
void da_out531(uint out_value)
{
uchar da_h8,da_l4,i;
uint a;
a=out_value;
da_h8=(uchar)(a>>4)&0x00ff;
a=out_value;
da_l4=(char)(a<<4)&0x00ff;
cs531=0;
for(i=0;i<8;i++)
{
clk531=0;
delay1ms(1);
if(da_h8&0x80)din531=1;
else din531=0;
clk531=1;
da_h8<<=1;
}
for(i=0;i<4;i++)
{
clk531=0;
delay1ms(1);
if(da_l4&0x80)
din531=1;
else
din531=0;
clk531=1;
da_l4<<=1;
}
cs531=1;
}
/******************延时**********************/
void delay1ms(uint t) //延时1MS
{
uchar j;
while(t--)
{
for(j=0;j<125;j++)
{;}
}
}
/*****************4乘4键盘**************/
/* 键扫描函数 */
uchar keyscan(void)
{
uchar scancode,tmpcode;
P2 = 0xf0; // 发全0行扫描码
if ((P2&0xf0)!=0xf0) // 若有键按下
{
delay1ms(2); // 延时去抖动
if ((P2&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响
{
scancode = 0xfe;
while((scancode&0x10)!=0) // 逐行扫描
{
P2 = scancode; // 输出行扫描码
if ((P2&0xf0)!=0xf0) // 本行有键按下
{
tmpcode = (P2&0xf0)|0x0f;
/* 返回特征字节码,为1的位即对应于行和列 */
return((~scancode)+(~tmpcode));
}
else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
}
}
}
return(0); // 无键按下,返回值为0
}
/* 键盘取值函数*/
void getscan()
{ uchar j,enterflag=0; // 确认键按下与否标志
key = keyscan(); // 调用键盘扫描函数
switch(key)
{
case 0x11: // 1行1列,数字0
if (count<2)
{
wordbuf[count] = '0';
count++;
}
break;
case 0x21: // 1行2列,数字1
if (count<2)
{
wordbuf[count] = '1';
count++;
}
break;
case 0x41: // 1行3列,数字2
if (count<2)
{
wordbuf[count] = '2';
count++;
}
break;
case 0x81: // 1行4列,数字3
if (count<2)
{
wordbuf[count]= '3';
count++;
}
break;
case 0x12: // 2行1列,数字4
if (count<2)
{
wordbuf[count] = '4';
count++;
}
break;
case 0x22: // 2行2列,数字5
if (count<2)
{
wordbuf[count]= '5';
count++;
}
break;
case 0x42: // 2行3列,数字6
if (count<2)
{
wordbuf[count]= '6';
count++;
}
break;
case 0x82: // 2行4列,数字7
if (count<2)
{
wordbuf[count]= '7';
count++;
}
break;
case 0x14: // 3行1列,数字8
if (count<2)
{
wordbuf[count] = '8';
count++;
}
break;
case 0x24: // 3行2列,数字9
if (count<2)
{
wordbuf[count]= '9';
count++;
}
break;
case 0x44: // 3行3列,确认键
{ if(count==2)
enterflag = 1;} // 确认键按下
break;
case 0x84: // 3行4列,取消键
{
count = 0; // 计数清零
//TempOut=1;
for(j=0;j<6;j++)
wordbuf[j]=0x00;
for(j=0;j<2;j++)
*(keyascan+j)=0x00;
}
break;
default:break;
}
if ( enterflag==1) // 如果按下确认键
{
wordbuf[2]='m';
wordbuf[3]='V';
enterflag = 0; // 标志位置回0
count = 0; // 密码位计数器清零
for(j=0;j<2;j++)
*(keyascan+j)=wordbuf[j];
// change=0;
}
}
/*************************lcd1602程序**************************/
void wr_com(unsigned char com)//写状态字//
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
P0=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(unsigned char dat)//写数据//
{
delay1ms(1);;
RS=1;
RW=0;
EN=0;
P0=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init()//初始化设置//
{
delay1ms(15);
wr_com(0x38);delay1ms(5);
wr_com(0x08);delay1ms(5);
wr_com(0x01);delay1ms(5);
wr_com(0x06);delay1ms(5);
wr_com(0x0c);delay1ms(5);
}
void display(unsigned char *p)//显示//
{
while(*p!='\0')
{
wr_dat(*p);
p++;
delay1ms(1);
}
}
init_play()//初始化显示
{
lcd_init();
wr_com(0x80);
display(str1);
wr_com(0xc0);
display(str2);
wr_com(0x86);
wr_dat(wordbuf[0]);//显示十位
wr_com(0x87);
wr_dat(wordbuf[1]);//显示个位
wr_com(0x88);
wr_dat(wordbuf[2]);//显示m
wr_com(0x89);
wr_dat(wordbuf[3]);//显示V
}
/*jsdisdisplay()//计数显示
{
wr_com(0x8A);
wr_dat(JS[0]);//显示'0'
wr_com(0x8B);
wr_dat(JS[1]);//显示'0'
wr_com(0x8C);
wr_dat(JS[2]);//显示':'
wr_com(0x8D);
wr_dat(JS[3]);//显示'0'
wr_com(0x8E);
wr_dat(JS[4]);//显示'0'
} */
void main()
{
init_play();//初始化显示
//jsdisdisplay();
while(1)
{
getscan();
if(key!=0)
init_play();
da_out531(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -