大疆无人机、福禄克万用表、小米手机、华为手表等你来!
首先设计电路图,由于模块不多,所以接口可以随意分配,电路仿真图如下图1。
设计时需要一步一步进行设计,一般设计开始尽量将人机交互的模块优先级调高。这里呢就优先对LCD1602进行设计,驱动程序如下:
void wrc(uint8 c)
{
delay(1);
rs=0;
rw=0;
e=0;
P0=c;
e=1;
delay(1);
e=0;
}
void wrd(uint8 dat)
{
delay(1);
rs=1;
rw=0;
e=0;
P0=dat;
e=1;
delay(1);
e=0;
rs=0;
}
void init()
{
delay(1);
wrc(0x38);
wrc(0x38);
wrc(0x38);
wrc(0x06);
wrc(0x0c);
wrc(0x01);
}
unsigned char A_D(unsigned char CH) //AD函数
{
unsigned char i,adval,test; //定义局部变量并初始化
adval=0x00;
test=0x00;
DI=1; //DI初始高电平在第一个时钟脉冲的下降沿前保持高电平,表示启动信号
_nop_();
CS=0; //片选
_nop_();
Clk=1; //clk上升沿,起始位写入
_nop_();
if(CH==0x00) //选择通道0
{
Clk=0; //clk低电平
DI=1;
_nop_();
Clk=1; //clk上升沿,通道0的第一位写入
_nop_();
Clk=0;
DI=1;
_nop_();
Clk=1; //clk上升沿,通道0的第二位写入
_nop_();
}
else
{
Clk=0;
DI=1;
_nop_();
Clk=1; //clk上升沿,通道1的第一位写入
_nop_();
Clk=0;
DI=1;
_nop_(); //clk上升沿,通道1的第二位写入
Clk=1;
_nop_();
}
Clk=0;
DI=1;
for(i=0;i<8;i++) //从高位向低位读取八位AD值
{
_nop_();
adval<<=1;
Clk=1;
_nop_();
Clk=0;
if(DO)
adval|=0x01;
else
adval|=0x00;
}
for(i=0;i<8;i++)
{
test>>=1; //从低位向高位读取八位AD值
if(DO)
test|=0x80;
else
test|=0x00;
_nop_();
Clk=1;
_nop_();
Clk=0;
}
if(adval==test) dat=test; //判断两个读取值是否相等相等就把读取的数赋值给DAT
_nop_();
CS=1;
DO=1;
Clk=1;
return dat;
}
最后来对矩阵键盘进行设计,这个也是比较简单的,一般学过单片机的都了解,代码如下:
uint8 keyscan() //按键扫描程序
{
uint8 h,l,value;
P1=0x0f;
h=P1&0x0f;
if(h!=0x0f)
{
delay(1);
if(h!=0x0f)
{
h=P1&0x0f;
l=P1|0xf0;
P1=l;
l=P1&0xf0;
h=P1&0x0f;
value=h+l;
}
return value;
}
}
驱动都有了,最后就是实现逻辑了,由于逻辑代码有点多,这里就不贴出来了,最后来看一看效果吧!
面包板社区DIY活动进行中!👇
社
【奖项设置】
二等奖(不限人数):福禄克F15B PRO MAX万用表、华为WATCH FIT 2...(任选一个)
三等奖(不限人数):小米手环9 NFC版、小米mini筋膜枪2C、价值¥300电子常用工具大礼包...(任选一个)