项目七:制作银行动态密码获取系统_第1页
项目七:制作银行动态密码获取系统_第2页
项目七:制作银行动态密码获取系统_第3页
项目七:制作银行动态密码获取系统_第4页
项目七:制作银行动态密码获取系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目七:制作银行动态密码获取系统串行通信与随机数应用目录/CONTENTS01项目学习目标明确课程核心方向与预期成果02项目基本知识串行通信概念、结构及寄存器配置03项目技能实训随机数生成与动态密码系统实践04项目小结课程总结回顾与知识体系梳理01项目学习目标技能目标:实践与应用识别串行口引脚(P3.0/P3.1)功能制作动态密码获取系统电路配置串行口工作方式及波特率识读程序语句与流程图编写、编译及调试应用程序下载程序并调试运行系统知识目标:原理与机制串行通信基本概念与分类8051串行口内部结构与原理SCON/PCON寄存器位功能解析掌握4种工作方式(重点方式1)波特率设置与定时器1的关系单片机随机数生成方法与应用素养目标:意识与习惯安全意识:培养信息安全与保密意识规范操作:养成遵守通信协议的习惯团队协作:提升分组讨论与沟通能力02项目基本知识-串行通信基础并行通信(Parallel)特点:各位同时传输,速度快;但线缆多、成本高、抗干扰弱。应用:单片机内部通信(如CPU与存储器、I/O口)。串行通信(Serial)特点:按位顺序传输,速度较慢;但线缆少、成本低、适合远距离。应用:与外部设备通信(如PC机、蓝牙、GPS模块)。串行通信的分类异步通信(Asynchronous)无统一时钟,靠起始/停止位同步。灵活简单,应用广泛。同步通信(Synchronous)共用时钟信号,无起止位。传输效率高,适合高速大数据。02项目基本知识-8051单片机串行口结构内部结构核心组成数据缓冲器(SBUF)物理上独立的发送/接收双缓冲,共用地址99H,实现全双工通信基础。输入/输出移位寄存器负责串/并行数据格式转换,是数据进出的关键通道。波特率发生器由定时器1/2溢出率或系统时钟分频提供,决定通信速率。控制寄存器(SCON/PCON)配置工作方式、波特率及数据传输过程,是串行口的"大脑"。02项目基本知识-串行口控制寄存器SCONSCON是一个8位特殊功能寄存器(地址98H),用于控制串行口工作方式、收发控制及状态标志,支持位寻址。位号D7D6D5D4D3D2D1D0位名称SM0SM1SM2RENTB8RB8TIRISM0/SM1:工作方式选择00:同步移位寄存器;01:8位异步通信10:9位异步通信;11:9位异步通信SM2:多机通信控制1:允许多机通信,需RB8=1激活RI0:禁止多机通信,无论RB8都激活RIREN:接收允许控制1:允许串行口接收数据0:禁止串行口接收数据TB8/RB8:第9位数据TB8:发送第9位,用于奇偶校验或地址标志RB8:接收第9位,方式1中为停止位TI/RI:中断标志位TI:发送完成硬件置1,需软件清0RI:接收完成硬件置1,需软件清002项目基本知识-串行口工作方式0核心定义与技术参数当SM0SM1=00时,工作于同步移位寄存器方式。主要用于扩展单片机I/O口,而非异步通信。数据格式8位数据,低位在前,高位在后,无起始/停止位。固定波特率fosc/12(例如:12MHz晶振对应1Mbps)引脚功能定义RXD(P3.0):串行数据输入/输出TXD(P3.1):同步移位时钟输出工作流程与应用场景发送过程(TI置1)CPU写SBUF启动->RXD串行移出/TXD发时钟->8位发送完TI=1接收过程(RI置1)REN=1启动接收->RXD串行移入/TXD发时钟->8位接收完RI=1典型应用:I/O口扩展外接移位寄存器芯片(如74LS164串入并出、74LS165并入串出),实现多个并行I/O口的扩展。02项目基本知识-串行口工作方式18位异步通信核心特性帧格式:10位一帧(1起始+8数据+1停止)功能定位:最常用的异步通信方式,用于单片机与PC/外设通信适用场景:绝大多数需要异步数据传输的场合波特率计算与配置计算公式:波特率=(2^SMOD/32)×定时器1溢出率定时器配置:通常工作在方式2(8位自动重装)以获得稳定波特率影响因素:受PCON寄存器中的SMOD位控制(加倍/不加倍)数据发送过程(TXD)启动:CPU执行写SBUF指令,启动发送过程:数据以帧格式从TXD引脚串行输出完成:发送结束后,硬件自动将TI置1(需软件清0)数据接收过程(RXD)启动:检测到RXD引脚出现1到0的跳变(起始位)装载:数据装入SBUF和RB8,需满足SM2=0或停止位为1完成:接收结束后,硬件自动将RI置1(需软件清0)02项目基本知识-波特率设置核心原理与公式(方式1)波特率=(2^SMOD/32)×(fosc/(12×(256-TH1)))SMOD(波特率加倍位)PCON.7位,0=不加倍(默认),1=加倍。fosc(系统晶振频率)常见值为11.0592MHz,用于精确分频。TH1(定时器1重装初值)决定溢出率,需工作在方式2(8位自动重装)。实战示例:9600bps设置流程条件:fosc=11.0592MHz|SMOD=0|目标=9600bps1设置定时器1工作方式(方式2)

代码:TMOD|=0x20;//8位自动重装2计算TH1初值

TH1=256-(11059200/(32*12*9600))=0xFD3装载初值

代码:TH1=0xFD;TL1=0xFD;4启动定时器

代码:TR1=1;//开启定时器102项目基本知识-随机数生成线性同余法(LCG)原理Xₙ₊₁=(A×Xₙ+C)modM参数定义:Xₙ:当前随机数|A:乘数|C:增量|M:模数示例:X=(X*1103515245+12345)%65536;获取真随机:随机种子来源定时器读数(推荐)利用程序启动或运行时的定时器计数值作为初始种子,随机性好且获取方便。按键输入时间记录用户按下按键的精确时刻,利用人为操作的不确定性作为随机源。A/D转换噪声读取悬空的模拟引脚电压值,利用电路中的自然噪声作为随机种子。03项目技能实训-制作动态密码获取系统实训任务:基于串行通信的动态密码系统串行通信配置配置方式1异步通信,波特率9600bps,建立单片机与PC机的物理连接。随机密码生成与触发按键触发中断,调用随机数函数生成6位数字密码(如123456)。数据传输与PC端显示通过串行口发送密码,在PC端使用串口调试助手接收并实时显示。核心任务目标综合运用串行通信、按键中断和随机数生成知识,完成系统设计。掌握单片机串行口初始化配置及数据收发编程方法。理解伪随机数算法原理,实现可靠的动态密码生成。熟悉PC机串口调试助手的使用及软硬件联调方法。实现从硬件连接到软件编程的完整闭环,交付可运行系统。03项目技能实训-硬件电路设计单片机最小系统与按键电路核心采用51单片机,配合11.0592MHz晶振;按键接P1.0口触发密码生成,并联电容消除抖动。RS-232电平转换(MAX232)实现TTL与RS-232电平互转:发送:单片机TXD(P3.1)→MAX232T1IN→DB9RXD接收:DB9TXD→MAX232R1IN→单片机RXD(P3.0)接口与焊接注意事项使用DB9串口连接PC;焊接时需特别注意MAX232引脚顺序及外围电容连接。03项目技能实训-硬件电路设计03项目技能实训-软件程序设计思路延时函数模块(delay)提供毫秒级延时,用于按键消抖核心接口:voiddelay_ms(unsignedintms)随机数生成模块(random)线性同余法算法,定时器读数初始化种子核心接口:unsignedintget_random(void)串行口初始化(uart_init)配置工作方式1,波特率9600bps初始化定时器T1,开启接收允许REN=1串行口发送模块(uart_send)实现单字节与字符串发送功能接口:uart_send_byte(),uart_send_string()主函数模块(main)系统初始化:串口、随机种子主循环:检测按键->生成随机密码->发送数据模块化设计优势逻辑清晰:各模块功能独立单一易于维护:便于独立编写、调试与复用03项目技能实训-串行口初始化代码uart_init.c-串行口初始化核心逻辑//串行口初始化函数(9600bps@11.0592MHz)voiduart_init(void){TMOD|=0x20;//1.设置定时器1为工作方式2(8位自动重装)TH1=0xFD;//2.装载定时器1初值(9600bps)TL1=0xFD;SCON=0x50;//3.设置串行口为方式1,允许接收PCON|=0x80;//4.设置SMOD=1,波特率加倍TR1=1;//5.启动定时器1}

//主函数入口voidmain(void){uart_init();//调用初始化函数while(1){...}}步骤1:定时器模式配置通过TMOD|=0x20将定时器1设置为工作方式2(8位自动重装),这是串口波特率发生器最常用的模式。步骤2:波特率与串口设置装载初值TH1=0xFD对应9600波特率;配置SCON=0x50设定串口为方式1并允许接收,最后启动定时器。核心寄存器解析SCON寄存器配置了串口的工作模式,PCON的SMOD位用于波特率加倍,共同决定了数据传输的速率和格式。03项目技能实训-随机数生成与发送代码random_key.c//1.毫秒级延时函数voiddelay_ms(unsignedintms){...}

//2.串口发送一个字节voiduart_send_byte(unsignedchardat){SBUF=dat;//写入发送缓冲器while(!TI);//等待发送完成TI=0;//清0标志位}

//3.线性同余法生成随机数unsignedintget_random(void){rand_seed=(unsignedint)((1103515245L*rand_seed+12345L)%2147483648L);returnrand_seed;}delay_ms延时函数标准的毫秒级延时实现,主要用于按键消抖处理,确保按键检测的稳定性。uart_send_byte串口发送核心发送逻辑:将数据写入SBUF寄存器,等待TI标志置1(发送完成),然后软件清零TI。get_random随机数生成(LCG)采用线性同余法,利用全局种子rand_seed递推生成。返回值可通过%1000000得到6位密码。03项目技能实训-程序流程图解析系统初始化(Init)初始化随机种子与串行口(UART),配置波特率与定时器。循环检测按键(Detection)进入主循环while(1),实时监测P1.0引脚状态,按键消抖确认。生成随机密码(Generate)调用随机函数生成16位数,取模后得到6位数字密码(000000-999999)。发送与循环(Transmit&Loop)通过UART发送ASCII码至PC机,等待按键释放后返回主循环。03项目技能实训-开发与验证代码开发与编译KeilC51环境代码编写编译检查,确保无语法错误配置工程生成HEX文件程序下载与硬件连接下载HEX文件至开发板检查MAX232与DB9连接串口线连接PC与开发板并上电PC端软件配置打开串口助手(如SSCOM)参数:波特率9600,8N1选择正确串口号并打开串口功能验证操作按下开发板按键,观察串口助手接收窗口预期输出:"PWD:123456"(6位随机动态密码)多次按键验证密码是否动态变化常见问题排查检查硬件连接(特别是串口电平转换)核对PC端串口参数与代码配置是否一致重点排查波特率设置与串行口初始化代码04项目小结核心知识点回顾串行通信基础:理解串/并行通信区别,掌握异步与同步通信特点。结构与寄存器:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论