单片机课程设计----单词记忆测试

  1. 点击Yes,代表认识这个单词,并记录下来。
    在这里插入图片描述

  2. 点击No,代表你不认识这个单词。
    在这里插入图片描述

  3. 点击Next,代表查看下一个单词。
    在这里插入图片描述

  4. 点击Back,代表查看上一个单词。
    在这里插入图片描述

  5. 点击Result代表查看目前为止,你认识的单词的正确率。
    在这里插入图片描述

  6. 点击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,表示重新开始

如果您感觉这篇文章有帮助,希望大家可以点个赞,支持一下。
您的支持,就是我的动力。

  • 10
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南枫_Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值