8255A/B口操作与KS1子程序:单片机中闭合键检测

需积分: 0 0 下载量 185 浏览量 更新于2024-07-13 收藏 4.81MB PPT 举报
在本篇单片机教程中,主要讨论了8255A/B口地址设置及一个关键子程序KS1的设计。8255是一个可编程输入/输出接口芯片,其A口和B口被赋予了200H和201H的地址。子程序KS1用于检测是否有闭合的按键,通过操作B口发送00H,然后读取A口的状态进行判断。A口的状态被取反并屏蔽高半字节后,如果(A)不等于0,表示至少有一个键被按下,反之则无键闭合。 程序流程是首先将DPTR(数据指针寄存器)指向B口地址201H,然后将A口设置为00H,写入B口,接着将DPTR减1,指向A口,读取A口内容并取反。通过与0FH(低4位全1)进行按位与运算,只保留低4位结果,这样可以忽略高半字节的状态,从而判断按键状态。 执行KS1子程序的出口参数是:(A)非零表示有闭合键,而(A)为0则表示无闭合键。这个子程序的设计体现了单片机汇编语言编程的核心概念,即通过指令集操作寄存器来控制硬件,实现对外部设备的交互。 课程目标涉及单片机的基本工作原理、汇编语言程序设计、应用系统设计等方面,让学生掌握单片机的结构、发展历史、常用系列,以及如何在实际应用中设计和利用单片机进行控制和通信。章节内容涵盖了单片机的分类(如冯诺依曼和哈佛结构)、CPU的特点、以及单片机在嵌入式系统中的角色。 学习者应理解单片机作为一种微型计算机的特殊形式,其紧凑的结构使得它能够被嵌入到各种设备中,提供了强大的控制能力。通过实践操作和理解这些概念,学生将能够设计出高效的单片机控制系统,应用于工业自动化、家用电器、通信设备等多种领域。

#include "mylogin.h" mylogin::mylogin(QWidget *parent) : QDialog(parent) { this->init_ui(); connect(this->bnt_login, &QPushButton::clicked, this, &mylogin::do_login); connect(this->bnt_register, &QPushButton::clicked , this ,&mylogin::do_enroll); } mylogin::~mylogin() { } void mylogin::init_ui() { this->setFixedSize(QSize(600,350)); this->setWindowTitle(tr("岑超升")); this->setWindowIcon(QIcon(":/src/1.png")); this->lb1 = new QLabel(); this->lb2 = new QLabel(); this->lb3 = new QLabel(); this->lb1->setFixedSize(QSize(560,200)); QPixmap pic; pic.load(":/src/2.png"); //this->lb1->setPixmap(pic.scaled(this->lb1->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); this->lb1->setPixmap(QPixmap(":/src/2.png")); this->lb2->setText(tr("用户名:")); this->lb3->setText(tr("密 码:")); this->usr_name_le = new QLineEdit(); //这两个参数后面传入信号中去,然后emit发射出去 this->usr_pass_le = new QLineEdit(); this->usr_pass_le->setEchoMode(QLineEdit::Password); this->bnt_login = new QPushButton(tr("登 陆")); this->bnt_register = new QPushButton(tr("注 册")); this->hb1 = new QHBoxLayout(); this->hb2 = new QHBoxLayout(); this->hb3 = new QHBoxLayout(); this->hb1->addWidget(this->lb2); this->hb1->addWidget(this->usr_name_le); this->hb2->addWidget(this->lb3); this->hb2->addWidget(this->usr_pass_le); this->hb3->addWidget(this->bnt_login); this->hb3->addWidget(this->bnt_register); this->vb1 = new QVBoxLayout(); this->vb1->addWidget(this->lb1); this->vb1->addLayout(this->hb1); this->vb1->addLayout(this->hb2); this->vb1->addLayout(this->hb3); this->setLayout(this->vb1); } void mylogin::do_login() { emit sig_login(usr_name_le->text(), usr_pass_le->text()); //需要把这里输入的账号密码信息发送到myapp那去,用到的函数是emit //需要自定义一个信号,sig_login //这个槽函数能够发出信号 } void mylogin::do_enroll() { emit sig_enroll(); }解释每一行代码

2023-06-09 上传