-
点击Yes,代表认识这个单词,并记录下来。
-
点击No,代表你不认识这个单词。
-
点击Next,代表查看下一个单词。
-
点击Back,代表查看上一个单词。
-
点击Result代表查看目前为止,你认识的单词的正确率。
-
点击Reset 代表重新开始。
连接的电路图
K5中的程序代码:
#include<reg51.h>
#define uint unsigned int//定义类型
#define uchar unsigned char
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
sbit yes=P3^0;
sbit no=P3^1;
sbit next=P3^2;
sbit back=P3^3;
sbit res=P3^4;
sbit reset=P3^5;
//uchar code tab[]={"first","second","third","forth","fifth","sixth","seventh","eighth","ninth","tenth"};
//uchar code order[]={"The first word "};
uchar code words[11][16]={
{" hello "},
{" world "},
{" blunder "},
{" benefactor "},
{" bleak "},
{" secure "},
{" caloric "},
{" chaos "},
{" precede "},
{" captain "},
{" end "},
};
uchar code sequence[11][16]={
{" 1 "},
{" 2 "},
{" 3 "},
{" 4 "},
{" 5 "},
{" 6 "},
{" 7 "},
{" 8 "},
{" 9 "},
{" 10 "},
{" end "}
};
uchar code result[11][16]={
{"Correct == 0%"},
{"Correct == 10%"},
{"Correct == 20%"},
{"Correct == 30%"},
{"Correct == 40%"},
{"Correct == 50%"},
{"Correct == 60%"},
{"Correct == 70%"},
{"Correct == 80%"},
{"Correct == 90%"},
{"Correct == 100%"}
};
uchar code tip[16]={"The Result IS :"};
void delay(uint xms);//函数声明
void write_com(uchar com);
void write_data(uchar dat);
uint i=0;
uint count=0;
uint correct=0;
void main()
{
//-----------------------------------------------
write_com(0x01);//清屏指令
write_com(0x06);//光标向右移动
write_com(0x0c);//显示功能开,无光标,不闪烁
write_com(0x38);//数据总线8位,显示2行数据
//---------------------------------------------
write_com(0x80);
//写数据
for(i=0;i<16;i++)
{
write_data(words[count][i]);
}
write_com(0xc0);
for(i=0;i<16;i++)
{
write_data(sequence[count][i]);
}
while(1)
{
if(yes==0 || no==0 || next==0 || back==0 || res==0 || reset==0)
{
delay(5);
if(yes==0 || no==0 || next==0 || back==0 ||res==0 || reset==0)
{
if(next==0)
{
count++;
//边界限制
if(count==11)
{
count=10;
}
//从第一行的第一个位置开始写数据
write_com(0x80);
//写数据
for(i=0;i<16;i++)
{
write_data(words[count][i]);
}
//从第二行的第一个位置开始写顺序
write_com(0xc0);
{
for(i=0;i<16;i++)
{
write_data(sequence[count][i]);
}
}
while(!next);
}
if(back==0)
{
//边界限制
count--;
if(count==-1)
{
count=0;
}
//从第一行的第一个位置开始写数据
write_com(0x80);
//写数据
for(i=0;i<16;i++)
{
write_data(words[count][i]);
}
//从第二行的第一个位置开始写顺序
write_com(0xc0);
{
for(i=0;i<16;i++)
{
write_data(sequence[count][i]);
}
}
while(!back);
}
if(yes==0)
{
count++;
if(count==11)
{
count=10;
}
correct++;
if(correct>=11)
{
correct=10;
}
//从第一行的第一个位置开始写数据
write_com(0x80);
//写数据
for(i=0;i<16;i++)
{
write_data(words[count][i]);
}
//从第二行的第一个位置开始写顺序
write_com(0xc0);
{
for(i=0;i<16;i++)
{
write_data(sequence[count][i]);
}
}
while(!yes);
}
if(no==0)
{
count++;
if(count==11)
{
count=10;
}
//从第一行的第一个位置开始写数据
write_com(0x80);
//写数据
for(i=0;i<16;i++)
{
write_data(words[count][i]);
}
//从第二行的第一个位置开始写顺序
write_com(0xc0);
{
for(i=0;i<16;i++)
{
write_data(sequence[count][i]);
}
}
while(!no);
}
if(res==0)
{
//从第一行的第一个位置开始写数据
write_com(0x80);
//写数据
for(i=0;i<16;i++)
{
write_data(tip[i]);
}
write_com(0xc0);
for(i=0;i<16;i++)
{
write_data(result[correct][i]);
}
while(!res);
}
if(reset==0)
{
count=0;
correct=0;
//从第一行的第一个位置开始写数据
write_com(0x80);
//写数据
for(i=0;i<16;i++)
{
write_data(words[count][i]);
}
//从第一行的第一个位置开始写位置
write_com(0xc0);
//写数据
for(i=0;i<16;i++)
{
write_data(sequence[count][i]);
}
while(!reset);
}
}
}
}
}
//写入命令
void write_com(uchar com)
{
en=0;//初始状态E设置为0
//R/W为读写信号,高电平时进行读操作,低电平时进行写操作
rw=0;//低电平进行写操作
//RS数据、命令选择,高电平1时选择数据寄存器,低电平0时选择指令寄存器
rs=0;//指令寄存器
P1=com;//将要写的命令送到P0口
//en是E引脚,E为使能端,当E由高电平跳变成低电平时,液晶显示模块执行指令
en=1;
delay(5);//稍作延时
en=0;
}
//写入内容
void write_data(uchar dat)
{
en=0;
rw=0;
rs=1;//数据寄存器
P1=dat;//将要写的内容送到P0口
en=1;
delay(5);//稍作延时
en=0;
}
//延时
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
功能设计:点击Yes,表示认识这个单词,并记录为认识
点击No,表示不认识这个单词,并记录为不认识
点击Next,表示查看下一个单词,并不做记录
点击Back,表示查看上一个单词,并不做记录
点击Result,表示查看当前结果
点击Reset,表示重新开始
如果您感觉这篇文章有帮助,希望大家可以点个赞,支持一下。
您的支持,就是我的动力。