当前位置: 首页 > news >正文

不用下载就能看的网站的浏览器三只松鼠网站怎样做

不用下载就能看的网站的浏览器,三只松鼠网站怎样做,上海建设公司注册,买域名参考 51单片机入门教程 1. 单片机简介 1.1 定义 单片机#xff08;Micro Controller Unit#xff0c;简称 MCU#xff09; 内部集成了 CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集#xff08;依靠传感器#xff09;、处… 参考 51单片机入门教程 1. 单片机简介 1.1 定义 单片机Micro Controller Unit简称 MCU 内部集成了 CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集依靠传感器、处理依靠CPU和硬件设备例如电机LED 等的控制单片机跟计算机相比单片机算是一个袖珍版计算机一个芯片就能构成完整的计算机系统。但在性能上与计算机相差甚远但单片机成本低、体积小、结构简单在生活和工业控制领域大有所用应用领域智能仪表、实时工控、通讯设备、导航系统、家用电器等 1.2 STC89C52 单片机 STC 公司 51 单片机系列8 位RAM512 字节ROM8KFlash工作频率 12MHz STC89C52RC 的晶振集成在芯片内部工作频率为 11.0592MHz单片机晶振的作用利用一种能将电能和机械能相互转换的晶体在单片机中提供一个精确的时钟信号以便单片机能够正确执行其功能 51 单片机为什么叫 51 是因为这种单片机最初采用的是英特尔公司的 8051 指令系统。随着时间的推移有多家公司生产了兼容 8051 指令系统的单片机它们虽然功能各异但是核心架构相同因此都被统称为 51 单片机“51” 在这里代表了 8051 架构也就是 Intel 公司发明的一种早期的单片控制器架构 命名规则 1.3 单片机内部结构图 静态随机存取存储器Static Random-Access MemorySRAM是随机存取存储器的一种所谓的 “静态”是指这种存储器只要保持通电里面储存的数据就可以恒常保持只读存储器Read-Only MemoryROM以非破坏性读出方式工作只能读出无法写入信息信息一旦写入后就固定下来即使切断电源信息也不会丢失所以又称为固定存储器闪存是一种非易失性Non-Volatile内存在没有电流供应的条件下也能够长久地保持数据单片机通过配置寄存器来控制内部线路的连接通过内部不同线路的连接来实现不同电路以完成不同功能 1.4 单片机管脚图 1.5 单片机最小系统 1.6 单片机核心原理图 2. LED 2.1 简介 发光二极管Light Emitting DiodeLED用于照明、广告灯、指引灯、屏幕是一种冷光源因此比较环保且响应速度快左图左边是正极、右边是负极 2.2 LED 原理图 单片机上 RP9 上的数字 102前面两位数是一个有效数字 10第三位数字就是倍率 00102 10*10^2 1KΩ电阻或电容的通用读数方式此处的电阻也称为限流电阻单片机可以通过控制 IO 口的输出模式和电平状态来实现对 IO 口输出高低电平的控制 1、设置 IO 口为输出模式在单片机的相应寄存器中设置 IO 口对应的引脚为输出模式2、控制 IO 口输出高低电平将 IO 口对应的引脚设置为期望输出的电平通常使用高电平表示逻辑 “1”低电平表示逻辑 “0” 单片机 TTL 电平高电平 5V低电平 0VLED 具有单向导电性当 LED 的正端接了高电位负端连接了低电位且正负端电位差超过 1.8V 以上时LED 就会亮起来 2.3 进制转换 2.4 C51 数据类型 2.5 示例代码 2-1 点亮一个 LED #include REGX52.H // 定义寄存器和端口识别 P2 口void main() {P2 0xFE; // 1111 11100x 前缀表示 十六进制引脚配置为 “低电平有效”// P2 0x55; // 0101 01018 个 LED 灯间隔点亮while (1) {} }2-2 LED 闪烁 #include REGX52.H #include INTRINS.H // _nop_(); 需要的头文件void Delay500ms() { // 12.000 MHzunsigned char i, j, k;_nop_(); // 空操作命令确保编译器不会对后续的循环优化i 4;j 205;k 187;// 外层循环的条件是 i ! 0// 内层两层循环的条件分别是 j ! 0 k ! 0do {do {while (--k); // 循环耗时操作} while (--j); // 嵌套循环耗时操作} while (--i); }void main() {while(1) {P2 0xFE; // 1111 1110Delay500ms(); // 单片机当中每次都是以 MHZ 速度运行闪烁太快人眼看不出因此要加延迟函数P2 0xFF; // 1111 1111Delay500ms();} }2-3 LED 流水灯固定延时时间 #include REGX52.H #include INTRINS.Hvoid Delay500ms() { // 12.000 MHzunsigned char i, j, k;_nop_();i 4;j 205;k 187; do {do {while (--k);} while (--j);} while (--i); }void main() {while (1) {P2 0xFE; // 1111 1110Delay500ms();P2 0xFD; // 1111 1101Delay500ms();P2 0xFB; // 1111 1011Delay500ms();P2 0xF7; // 1111 0111Delay500ms();P2 0xEF; // 1110 1111Delay500ms();P2 0xDF; // 1101 1111Delay500ms();P2 0xBF; // 1011 1111Delay500ms();P2 0x7F; // 0111 1111Delay500ms();} }2-4 LED 流水灯2自定义延时时间 #include REGX52.Hvoid Delay1ms(unsigned int xms); // 12.000MHzvoid main() {while (1) {P2 0xFE; // 1111 1110Delay1ms(100);P2 0xFD; // 1111 1101Delay1ms(100);P2 0xFB; // 1111 1011Delay1ms(100);P2 0xF7; // 1111 0111Delay1ms(100);P2 0xEF; // 1110 1111Delay1ms(100);P2 0xDF; // 1101 1111Delay1ms(100);P2 0xBF; // 1011 1111Delay1ms(100);P2 0x7F; // 0111 1111Delay1ms(100);} }void Delay1ms(unsigned int xms) { // 12.000MHzunsigned char i, j;while (xms) {i 2;j 239;do {while (--j);} while (--i);xms--;} }3. 独立按键 3.1 按键介绍 轻触按键相当于是一种电子开关按下时开关接通松开时开关断开实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开 3.2 独立按键原理图 单片机上电时所有 IO 口默认都是高电平那么按键没有按下时这个 IO 口就是高电平按下后这个 IO 口就变成低电平寄存器会检测 IO 口的电平然后再读回这个寄存器中 3.3 C51 数据运算 3.4 C51 基本语句 3.5 按键的抖动 对于机械开关当机械触点断开、闭合时由于机械触点的弹性作用一个开关在闭合时不会马上稳定地接通在断开时也不会一下子断开所以在开关闭合及断开的瞬间会伴随一连串的抖动 3.6 示例代码 3-1 独立按键控制 LED 亮灭 #include REGX52.Hvoid main() {while (1) {if (P3_1 0 || P3_0 0) { // 如果 K1 按键RXDP3_1或 K2 按键TXDP3_0按下P2_0 0; // LED1 输出 0点亮} else {P2_0 1; // LED1 输出 1熄灭}} }3-2 独立按键控制 LED 状态 #include REGX52.Hvoid Delay(unsigned int xms) {unsigned char i, j;while (xms) {i 2;j 239;do {while (--j);} while (--i);xms--;} }void main() {while (1) {if (P3_1 0) { // 如果 K1 按键按下Delay(20); // 延时以消除按键抖动带来的影响while (P3_1 0); // 判断 K1 按键是否仍处于按下状态松手检测Delay(20); // 延时以消除按键抖动带来的影响P2_0 ~P2_0; // LED1 取反}} }3-3 独立按键控制 LED 显示二进制 #include REGX52.Hvoid Delay(unsigned int xms) {unsigned char i, j;while (xms--) {i 2;j 239;do {while (--j);} while (--i);} }void main() {unsigned char LEDNum 0; // 无符号字符型所占1字节 8bit位刚好对应着 8 位二进制的数据while (1) {if (P3_1 0) { // 如果 K1 按键按下Delay(20); // 延时消抖while (P3_1 0); // 判断 K1 按键是否仍处于按下状态松手检测Delay(20); // 延时消抖LEDNum; // 变量自增用于切换 LED 灯的状态// P2 口上电之后和单片机的 IO 上电一样都是默认的是高电平1111 1111P2 ~LEDNum; // 变量取反输出给 LED控制 LED 灯的亮灭}} }3-4 独立按键控制 LED 移位 // K1 P3_1K2 P3_0K3 P3_2K4 P3_3 #include REGX52.Hvoid Delay(unsigned int xms); unsigned char LEDNum; // 全局变量定义默认为 0void main() {P2 ~0x01; // 上电默认 LED1 点亮while (1) {if (P3_1 0) { // 如果 K1 按键按下Delay(20);while (P3_1 0);Delay(20);LEDNum; // LEDNum 自增if (LEDNum 8) // 限制 LEDNum 自增范围LEDNum 0;P2 ~(0x01 LEDNum); // LED 的第 LEDNum 位点亮}if (P3_0 0) { // 如果 K2 按键按下Delay(20);while (P3_0 0);Delay(20);if (LEDNum 0) // LEDNum 减到 0 后变为 7LEDNum 7;else // LEDNum 未减到 0自减LEDNum--;P2 ~(0x01 LEDNum); // LED 的第 LEDNum 位点亮}} }void Delay(unsigned int xms) {unsigned char i, j;while (xms--) {i 2;j 239;do {while (--j);} while (--i);} }4. 数码管 4.1 简介 LED 数码管一种简单、廉价的显示器是由多个发光二极管封装在一起组成 “8” 字型的器件 数码管分共阳数码管和共阴数码管 共阳数码管把 8 段 LED 的正极并在一起作为公共端连接在 5V 上共阳极然后 8 个 LED 通过单片机的 8 个 IO 端口输出高低电平使其决定点亮哪几个段 数码管其实就是 8 个段的发光二极管只点亮其中的几个段即可显示出数字或字母用来表达信息 4.2 数码管的引脚定义 以共阴极为例下图右上若要显示数字 6 1、把共阴极的公共端位选端接地/负极即给这个数据 “0” 或是低电平2、把段码 A、C、D、E、F、G 接正极即给这个数据 “1” 或是高电平 以共阴极为例下图右上若要在第三位数码管显示数字 1 1、把共阴极的公共端位选端当中的第三位数码管接地/负极即给这个数据 “0” 或是低电平2、再给 1、2、4 上的位选给 “1” 或是高电平 4.3 数码管原理图 LED1~LED8 都是接到 138 译码器上的输出端138 译码器原理如下 把 P22、P23、P24 三个端口变成 8 个端口LED1~LED8来控制左边的 A、B、C 是输入端正极右边 Y0~Y7 是输出端负极 C 是高位、B 在中间、A 是低位C B A 按高、低位排序后再将二进制转换为十进制数对应着输出端 Y0~Y7例如 C B A0 0 0 Y0C B A0 0 1 Y1对应 LED2C B A1 0 1 Y5C B A1 1 0 Y6 右下角三个引脚称为使能端相当于一种开关如果使能电平有效它就可以工作 74HC245 芯片作用也称双向数据缓冲器用来提高芯片驱动能力 电容 CC2 作用起到电源滤波作用使得芯片的供电更加稳定 RP4 电阻限流作用100R 单位为 Ω 位选 如 C B A 0 1 1 Y3 LED4LED4 就是有效的/允许显示数码管的那么其它的数码管是不能被允许显示的/不是有效的 段选 选中之后就是给 P0 口段码的数据假设给上数据经过缓冲送到公共端的段码端。那么送到段码端就会显示数码管相对应的数字P0 口给上数据是从高位到低位给上段码端的 4.3 C51 数组 子函数 数组把相同类型的一系列数据统一编制到某一个组别中可以通过数组名 索引号简单快捷的操作大量数据 int x[3]; // 定义一组变量3个 int x[]{1,2,3}; // 定义一组变量并初始化x[0]; //引用数组的第0个变量 x[1]; //引用数组的第1个变量 x[2]; //引用数组的第2个变量 // 引用 x[3] 时数组越界读出的数值不确定应避免这种操作子函数将完成某一种功能的程序代码单独抽取出来形成一个模块在其它函数中可随时调用此模块以达到代码的复用和优化程序结构的目的 void Function(unsigned char x, y) {}返回值 函数名形参{函数体 }4.4 数码管段码表 4.5 数码管驱动方式 单片机直接扫描硬件设备简单但会耗费大量的单片机 CPU 时间专用驱动芯片内部自带显存、扫描电路单片机只需告诉它显示什么即可如下述 TM1640 4.6 示例代码 4-1 静态数码管显示 #include REGX52.H// 数码管段码表 unsigned char NixieTable[] {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};// Location数码管的位置Number显示数码管的数字 void Nixie(unsigned char Location, Number) {switch (Location) { // 位码输出case 1:P2_4 1; P2_3 1; P2_2 1;break;case 2:P2_4 1; P2_3 1; P2_2 0;break;case 3:P2_4 1; P2_3 0; P2_2 1;break;case 4:P2_4 1; P2_3 0; P2_2 0;break;case 5:P2_4 0; P2_3 1; P2_2 1;break;case 6:P2_4 0; P2_3 1; P2_2 0;break;case 7:P2_4 0; P2_3 0; P2_2 1;break;case 8:P2_4 0; P2_3 0; P2_2 0;break;}P0 NixieTable[Number]; // 段码输出 }void main() {Nixie (2, 3); // 在数码管的第 2 位置显示 3while (1) {} }4-2 动态数码管显示 #include REGX52.H// 数码管段码表 unsigned char NixieTable[] {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};//延时子函数 void Delay(unsigned int xms) {unsigned char i, j;while (xms--) {i 2;j 239;do {while (--j);} while (--i);} }// Location数码管的位置Number显示数码管的数字 void Nixie(unsigned char Location, Number) {switch (Location) { // 位码输出case 1:P2_4 1; P2_3 1; P2_2 1;break;case 2:P2_4 1; P2_3 1; P2_2 0;break;case 3:P2_4 1; P2_3 0; P2_2 1;break;case 4:P2_4 1; P2_3 0; P2_2 0;break;case 5:P2_4 0; P2_3 1; P2_2 1;break;case 6:P2_4 0; P2_3 1; P2_2 0;break;case 7:P2_4 0; P2_3 0; P2_2 1;break;case 8:P2_4 0; P2_3 0; P2_2 0;break;}P0 NixieTable[Number]; // 段码输出Delay(1); // 显示一段时间P0 0x00; // 段码清 0消影 }void main() {while (1) {Nixie(1, 1); // 在数码管的第 1 位置显示 1 // Delay(20);Nixie(2, 2); // 在数码管的第 2 位置显示 2 // Delay(20);Nixie(3, 3); // 在数码管的第 3 位置显示 3 // Delay(20);} }5. 模块化编程和 LCD 调试工具 5.1 模块化编程 传统方式编程 所有的函数均放在 main.c 里若使用的模块比较多则一个文件内会有很多的代码不利于代码的组织和管理而且很影响编程者的思路 模块化编程 把各个模块代码放在不同 .c 文件里在 .h 文件里提供外部可调用函数的声明其它 .c 文件想使用其中的代码时只需 #include “XXX.h” 文件即可模块化编程可极大的提高代码可读性、可维护性、可移植性等 .c 文件函数、变量的定义.h 文件可被外部调用的函数、变量的声明 注意事项 任何自定义的变量、函数在调用前必须有定义或声明同一个.c使用到的自定义函数的 .c 文件必须添加到工程参与编译使用到的 .h 文件必须要放在编译器可寻找到的地方工程文件夹根目录、安装目录、自定义 5.2 C 预编译 C 语言的预编译以 # 开头作用是在真正的编译开始之前对代码做一些处理预编译 5.3 LCD1602 调试工具 使用 LCD1602 液晶屏作为调试窗口提供类似 printf 函数的功能可实时观察单片机内部数据的变换情况便于调试和演示 LCD1602 连接的口是 P0 口 还占用三个 P2 口所以使用 LCD1602 液晶屏后三个 LED 就不能进行使用数码管也不能使用 LCD1602 原理图 5.4 使用示例 #include REGX52.H #include LCD1602.Hint main(void) {unsigned int Number 51;signed int negative -1;LCD_Init();while (1) {LCD_ShowChar(1, 1, W);LCD_ShowString(1, 2, XH);LCD_ShowNum(1, 4, Number,2);LCD_ShowSignedNum(1, 7, negative, 1);LCD_ShowHexNum(2, 1, 0xFF, 2);LCD_ShowBinNum(2, 4, 0x00, 8);} }6. 矩阵键盘 6.1 简介 在键盘中按键数量较多时为了减少 I/O 口的占用通常将按键排列成矩阵形式采用逐行或逐列的 “扫描”就可以读出任何位置按键的状态 扫描 数码管扫描输出扫描 原理显示第 1 位 → 显示第 2 位 → 显示第 3 位→……然后快速循环这个过程最终实现所有数码管同时显示的效果 矩阵键盘扫描输入扫描 原理读取第 1 行(列) → 读取第 2 行(列) → 读取第 3 行(列) → ……然后快速循环这个过程最终实现所有按键同时检测的效果 以上两种扫描方式的共性节省 I/O 口 单片机 IO 口模式 单片机的 IO 口是一种弱上拉的模式又被称作是准双向口inputoutput 既可以输入又可以输出 为什么单片机它的 IO 口是默认为高电平呢 是因为有一个上拉电阻把低电平变成高电平了所以才导致单片机是高电平还有一个是当口线输出为 1 的时候驱动能力很弱允许外部装置将其拉低当引脚的输出为低电平的时候它的驱动能力很强可以吸收相当大的电流单片机中 P1、P2、P3 都是一种弱上拉的一种模式 6.2 矩阵键盘原理图 6.3 使用示例 MatrixKey.h #ifndef __MATRIXKEY_H__ #define __MATRIXKEY_H__unsigned char MatrixKey();#endifMatrixKey.c #include REGX52.H #include Delay.h/*** brief 矩阵键盘读取按键键码* param 无* retval KeyNumber 按下按键的键码值如果按键按下不放程序会停留在此函数松手的一瞬间返回按键键码没有按键按下时返回 0 */ unsigned char MatrixKey() {unsigned char KeyNumber 0;P1 0xFF;P1_3 0;if (P1_7 0) {Delay(20); while(P1_7 0); Delay(20); KeyNumber 1;}if (P1_6 0) {Delay(20); while(P1_6 0); Delay(20); KeyNumber 5;}if (P1_5 0) {Delay(20); while(P1_5 0); Delay(20); KeyNumber 9;}if (P1_4 0) {Delay(20); while(P1_4 0); Delay(20); KeyNumber 13;}P1 0xFF;P1_2 0;if (P1_7 0) {Delay(20); while(P1_7 0); Delay(20); KeyNumber 2;}if (P1_6 0) {Delay(20); while(P1_6 0); Delay(20); KeyNumber 6;}if (P1_5 0) {Delay(20); while(P1_5 0); Delay(20); KeyNumber 10;}if (P1_4 0) {Delay(20); while(P1_4 0); Delay(20); KeyNumber 14;}P1 0xFF;P1_1 0;if (P1_7 0) {Delay(20); while(P1_7 0); Delay(20); KeyNumber 3;}if (P1_6 0) {Delay(20); while(P1_6 0); Delay(20); KeyNumber 7;}if (P1_5 0) {Delay(20); while(P1_5 0); Delay(20); KeyNumber 11;}if (P1_4 0) {Delay(20); while(P1_4 0); Delay(20); KeyNumber 15;}P1 0xFF;P1_0 0;if (P1_7 0) {Delay(20); while(P1_7 0); Delay(20); KeyNumber 4;}if (P1_6 0) {Delay(20); while(P1_6 0); Delay(20); KeyNumber 8;}if (P1_5 0) {Delay(20); while(P1_5 0); Delay(20); KeyNumber 12;}if (P1_4 0) {Delay(20); while(P1_4 0); Delay(20); KeyNumber 16;}return KeyNumber; }main.c #include REGX52.H #include Delay.h // 包含 Delay 头文件 #include LCD1602.h // 包含 LCD1602 头文件 #include MatrixKey.h // 包含矩阵键盘头文件unsigned char KeyNum;void main() {LCD_Init(); // LCD 初始化LCD_ShowString(1, 1, MatrixKey:); // LCD 显示字符串while (1) {KeyNum MatrixKey(); // 获取矩阵键盘键码if (KeyNum) { // 如果有按键按下LCD_ShowNum(2, 1, KeyNum, 2); // LCD 显示键码}} }6.4 矩阵键盘密码锁 #include REGX52.H #include Delay.h #include LCD1602.h #include MatrixKey.hunsigned char KeyNum; unsigned int Password, Count;void main() {LCD_Init();LCD_ShowString(1, 1, Password:);while (1) {KeyNum MatrixKey();if (KeyNum) {if (KeyNum 10) { // 如果 S1~S10 按键按下输入密码if (Count4) { // 如果输入次数小于 4Password * 10; // 密码左移一位Password KeyNum % 10; // 获取一位密码Count; // 计次加一}LCD_ShowNum(2, 1, Password, 4); // 更新显示}if (KeyNum 11) { // 如果 S11 按键按下确认if (Password 2345) { // 如果密码等于正确密码LCD_ShowString(1, 14, OK ); // 显示 OKPassword 0; // 密码清零Count 0; // 计次清零LCD_ShowNum(2, 1, Password, 4); // 更新显示} else {LCD_ShowString(1, 14, ERR); // 显示 ERRPassword 0; // 密码清零Count 0; // 计次清零LCD_ShowNum(2, 1, Password, 4); // 更新显示}}if (KeyNum 12) { // 如果 S12 按键按下取消Password 0; // 密码清零Count 0; // 计次清零LCD_ShowNum(2, 1, Password, 4); // 更新显示}}} }
http://www.ho-use.cn/article/10814115.html

相关文章:

  • 免费自助建站怎么样建设工程消防设计备案凭证查询网站
  • 建设医院网站的重点与难点在于海口seo关键词优化
  • 哪里有免费的网站网址网站安全建设思考
  • 物流网站建设规划书房地产网络营销方案
  • 网页制作app手机版企业网站优化是什么
  • 天津做网站最权威的公司微信公众号买卖平台
  • php网站怎么做自适应下沙做网站的
  • 淘宝客网站WordPress兰州高端网站
  • 免费网站制作开发公司凡科网站源码下载
  • 怎样在各大网站做推广杭州网红
  • 营销网站建设专业服务公司php网站怎么做伪静态
  • 有做的小说网站做膜的网站有哪些
  • 上海的外贸网站建设公司排名旅游网站开发价格
  • 泰安市网站建设怎么做网站互换链接
  • 查域名的网站新乡宣传片制作公司
  • 自己做网站服务器可以吗软件系统开发平台
  • 青岛建设官方网站网站开发人员工作内容
  • 连云港东海网站建设市场营销专业课程
  • 东莞网站平台费用搜索引擎
  • 开源企业网站管理系统做门户型网站要多少钱
  • 网站关键词排名如何做免费seo网站自动推广软件
  • 成都开发网站建设建设网站的书籍
  • 模板网站可以做备案吗提供手机网站制作公司
  • 哪里有手机网站制作公司湛江网站制作推广
  • 重庆渝网站建设怎么做网上卖货
  • 慈城旅游网站建设策划书企业网页设计多少钱
  • 龙岩网站设计制作php购物网站开发设计与实现
  • seo整站排名如何快速模仿一个网站
  • 合肥网站建设5k5通州企业网站建设
  • 题库网站怎么做jquery前端框架教程