##51单片机实验之简易验证码发生器

嘿!!好久不见,各位
会想小猪嘛?
嗯…怎么不会呢?

ヾ(≧ ▽ ≦)ゝ
在这里插入图片描述

前言:

本文由自主学习所做的一个实验,可能有很多不足,请各位大佬指出!!
在这里插入图片描述

一,摘要

这次的综合实验报告顺应着实验课题给出的题目写的,课题内容是验证码发生器。主要是通过运用该学期所学的单片机中串口通信、液晶显示器LCD1602、串口中断系统、外部中断的相关内容实现一个从主机(在虚拟终端输入)向子机发送6位数字或者字母的验证码验证信息,通过子机接收后在LCD1602上显示出来。为了验证其是否接收准确,这里在主机端也设计一个LCD1602液晶显示器显示在虚拟终端发送的内容,以此来检验子机接收的是否正确。此实验简易模拟了数字通信中验证码的发送机制,以下就是实验的全部内容。

二,目的

通过该实验来完善这阶段的单片机所学,顺便做一个总结,主要是串口通信的内容,准备接触嵌入式,也就为下面的学习做准备。

三,功能说明

在虚拟终端输入一个6位的字母或数字或者数字字母的组合,主机的LCD1602液晶显示器的显示屏上显示该输入的数据,按下按键即可发送该数据给子机,在子机的LCD1602显示屏上显示该数据。从验证码发生器的角度看就是主机向子机发送验证码,子机收到的验证码可以和主机匹对,检验验证码是否一致。
各部分的功能说明:
(1)主机AT89C51和子机的AT89C51:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可以降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
(2)LCD1602液晶显示器:点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成。显示屏上64×16个显示单元与显示RAM区的1024字节相对应,每一字节的内容与显示屏上相应位置的亮暗对应。例如显示屏第一行的亮暗由RAM区的000H~00FH的16字节的内容决定,当(000H)=FFH时,屏幕左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,屏幕右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H…,(00EH)=00H,(00FH)=00H时,在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。lcd1602主要用于显示数字,字母,图形和一些自定义字符。由于其简单的显示控制和高性价比,它被广泛用于电子仪表,冰箱,空调,汽车电子仪表和其他设备。
(3)虚拟终端:共有4个接线端,其中RXD为数据接收端,TXD为数据发送端,RTS为请求发送信号,CTS为清除传送,是对RTS的响应信号。Proteus提供的虚拟终端相当于键盘和屏幕的双重功能,免去了上位机系统的仿真模型,使用户在用到单片机与上位机之间的串行通信时,直接由虚拟终端经RS-232模型与单片机之间异步发送和接收数据。这里只是利用了虚拟终端发送数据的功能。

四,硬件电路设计

在这里插入图片描述
用到的元器件名称:AT89C51、BUTTON、LM016L、POT
在该实验中就是利用AT89C51的I/O接口P2连接LCD1602显示器,从而将接收的数据显示在LCD1602显示屏上。主机的AT89C51上的RXD连接虚拟终端上的TXD,从而接收虚拟终端输入的数据,在主机上TXD连接子机上的RXD发送数据到子机。按键连接P3^2口,利用外部中断0控制。

五,程序设计

(1)这里首先要讲的是LCD1602文件,我们学习单片机的都知道,在学习这部分内容的时候,老师会给出相应的LCD1602头文件,其中的头文件是比较完善的。但是在这里,我们需要自己写入相应的内容,因为这里我所需要实现的是由虚拟终端输入所以在写.c程序的时候要把所定义的函数的内容放到主机和子机中写,不能直接使用网上或者老师给出的LCD1602的头文件 ,需要改动一下。
首先我们来看原本的头文件:
在这里插入图片描述
打开intrins.h头文件可以看到里面的命令,我们可以引用头部和尾部来说明有这个头文件,中间可以定义自己需要的命令,这样之后就很清楚的知道自己需要用到的函数命令和变量。如下图
在这里插入图片描述
定义完所需要的变量之后就可以写LCD1602的.c文件了,如下:
在这里插入图片描述
(2)主机的.c文件
从main函数说起:
在这里插入图片描述
从main函数可以看出,这里包含了几个函数:
1,窗口函数
在这里插入图片描述
作用:定义串口工作方式1和定时工作方式1,设定波特率为9600(可以自行设计),打开总中断和串口中断。
2,外部中断开关函数
在这里插入图片描述
作用:打开外部中断(按键控制数据的发送)
3,LCD1602初始化函数
在这里插入图片描述
4,发送函数
在这里插入图片描述
作用:按键按下的时候数据发送给子机
5,显示函数
在这里插入图片描述
(以上解析的地方需要注意,这里就不做重复解析,又不懂的可以来问我哈)
作用:在显示屏上显示数据。
(3)主机全部的.c文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是验证码发送机制的主机的简易函数
(4)子机程序
在这里插入图片描述
在这里插入图片描述
子机程序比主机的要简单一些,但都是差不多的,就不做过多的解析了。

六,仿真

在这里插入图片描述
这里需要提醒一点:虚拟终端的波特率需要自己根据自己所设的波特率来设计的。
好啦!宝子们,以上就是该实验的全部内容,希望能帮助你对51单片机有进一步的理解
在这里插入图片描述
如果这篇文章对你有帮助或者你也喜欢小博主的,记得点赞评论加关注哦!不然就找不到我了o()q
多多支持小博主哈
我们一起加油

请添加图片描述

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱撸猫的程序媛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值