网站的站点建设分为,专业设计网站公司,建设小说网站违法吗,抖音seo优化系统招商在Proteus中绘制电路原理图
我使用的版本是Protues8.16 ,Protues特别擅长仿真单片机及其外围设备#xff0c;支持多种类型的微控制器#xff0c;如8051、HC11、PIC、AVR、ARM、MSP430等#xff0c;也可以设计pcb板#xff0c;还能3D建模
1.新建工程
在 Start 栏中点击 …在Proteus中绘制电路原理图
我使用的版本是Protues8.16 ,Protues特别擅长仿真单片机及其外围设备支持多种类型的微控制器如8051、HC11、PIC、AVR、ARM、MSP430等也可以设计pcb板还能3D建模
1.新建工程
在 Start 栏中点击 New Project ,随后为项目命名并挑选项目存放路径 选择 DEFAULT 默认选项 选择 Do not create a PCB layout 不绘制PCB电路图 选择 No Firmware Project 无固件项目 选择 Schematic 示意图 2.添加并调整组件 进入画图界面后点击黄色小三角 Component Mode 再点击蓝色的 小P 添加组件 弹出的组件添加界面中在左上角的 Keywords 中输入需要的元器件名称双击名称即可添加元器件 添加以下元器件AT89C51(MCU芯片C语言程序都烧录到这个芯片里面)、 CAP(电容) 、CAP-ELEC(电解电容)、 CRYSTAL(晶振)、 LM016L(1602屏幕)、 RES(电阻) 点击左下角的旋转箭头就可以更改元器件的方向了 点击双向的金色传说箭头符号 Terminals Mode 终端栏 就可以添加电源和地线了 点击蓝色总线符号 Buses Mode 可以添加总线 在绘制总线中需要注意一点就是支线路的名称要一致比如单片机的P1.0端口通过总线连接到屏幕的D0端口需要两个端口连接到总线的支线名称完全一致。 在原理图中双击元器件即可修改元器件信息 3.绘制原理图 这一部分是最小系统板在这次练习中是可有可无的但是我还是把它加上了诶 这里单片机的P2.0/A8端口直接连接到屏幕的RW接口P2.1/A9端口直接连接到屏幕的RS接口P2.2/A10端口直接连接到屏幕的E接口 这里附上LCD1602屏幕和AT89C51芯片的引脚名称和功能表格可以多了解下硬件知识
LCD1602屏幕引脚含义
引脚编号引脚名称功能描述1VSS电源地2VDD电源正极5V3VEE通过连接一个可变电阻如电位器到VEE引脚可以调整液晶显示的对比度。4RS注册选择高电平时选择数据寄存器、低电平时选择指令寄存器5RW读/写信号线高电平时进行读操作低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址当RS为低电平RW为高电平时可以读忙信号当RS为高电平RW为低电平时可以写入数据6E使能端当E端由高电平跳变成低电平时液晶模块执行命令7D0并行数据输入端0位8D1并行数据输入端1位9D2并行数据输入端2位10D3并行数据输入端3位11D4并行数据输入端4位12D5并行数据输入端5位13D6并行数据输入端6位14D7并行数据输入端7位
AT89C51芯片引脚含义
在Proteus中AT89C51可以看到有39只引脚 因为Proteus中默认给芯片上电有两只引脚隐藏起来了
引脚号引脚名称含义1P1.0端口1的第0位双向I/O口2P1.1端口1的第1位双向I/O口.........8P1.7端口1的第7位双向I/O口9RST复位引脚用于将单片机复位到初始状态10P3.0/RXD端口3的第0位双向I/O口同时也是串行通信的接收端RXD11P3.1/TXD端口3的第1位双向I/O口同时也是串行通信的发送端TXD12P3.2/INT0端口3的第2位双向I/O口外部中断0输入13P3.3/INT1端口3的第3位双向I/O口外部中断1输入14P3.4/T0端口3的第4位双向I/O口定时器0的外部输入15P3.5/T1端口3的第5位双向I/O口定时器1的外部输入16P3.6/WR端口3的第6位双向I/O口外部数据存储器写使能17P3.7/RD端口3的第7位双向I/O口外部数据存储器读使能18XTAL2振荡器反相放大器的输出19XTAL1振荡器反相放大器及内部时钟电路的输入20P2.0端口2的第0位双向I/O口.........27P2.7端口2的第7位双向I/O口在访问外部存储器时用作高8位地址总线28PSEN外部程序存储器读选通信号输出29ALE/PROG地址锁存使能端编程时作为编程脉冲输入30EA/VPP外部访问允许端高电平时从外部程序存储器读取指令低电平时从内部程序存储器读取指令编程时作为编程电源输入31P0.0端口0的第0位双向I/O口在访问外部存储器时还用作低8位地址/数据总线.........38P0.7端口0的第7位双向I/O口在访问外部存储器时还用作低8位地址/数据总线 在Keil中编写程序代码
准备工作
这里我使用得Keil4大家在编写代码前一定要看一下是不是C51的版本。这里斌酱问我如何下载Keil4/5和C51 这里在官网下载就可以Keil Product DownloadsARM架构芯片下载ARM-MDKC51系列下载C51就可以32位51单片机下载C251. 安装过程中需要完成注册才能正常使用在CSDN里有一大堆应对方法无需淘宝付费购买免费使得我像犀牛一样快乐。
在后续的新建项目中要选择Atmel公司的AT89C51芯片 头文件及c语言文件
LCD1602.h
#ifndef __LCD_H__
#define __LCD_H__ #define LCD_GO_HOME 0x02 // 设置AC地址计数器为0并返回HOME位置 // 地址计数器自动增减设置
#define LCD_AC_AUTO_INCREMENT 0x06 // 写入数据后地址计数器自动加1
#define LCD_AC_AUTO_DECREASE 0x04 // 写入数据后地址计数器自动减1
#define LCD_MOVE_ENABLE 0x05 // 允许显示数据移动
#define LCD_MOVE_DISENABLE 0x04 // 禁止显示数据移动 // 显示控制相关指令
#define LCD_DISPLAY_ON 0x0C // 显示开
#define LCD_DISPLAY_OFF 0x08 // 显示关
#define LCD_CURSOR_ON 0x0A // 光标显示
#define LCD_CURSOR_OFF 0x08 // 光标不显示
#define LCD_CURSOR_BLINK_ON 0x09 // 光标闪烁
#define LCD_CURSOR_BLINK_OFF 0x08 // 光标不闪烁 // 显示移动相关指令影响DDRAM显示数据RAM
#define LCD_LEFT_MOVE 0x18 // LCD显示左移一位
#define LCD_RIGHT_MOVE 0x1C // LCD显示右移一位
#define LCD_CURSOR_LEFT_MOVE 0x10 // 光标左移一位
#define LCD_CURSOR_RIGHT_MOVE 0x14 // 光标右移一位 // 显示模式设置
#define LCD_DISPLAY_DOUBLE_LINE 0x38 // 双行显示模式
#define LCD_DISPLAY_SINGLE_LINE 0x30 // 单行显示模式 void LCD_cls(void); // 清屏函数
void LCD_write_data(unsigned char); // 写入数据到LCD
void LCD_initial(void); // 初始化LCD
void LCD_set_position(unsigned char); // 设置LCD显示位置
void LCD_prints(unsigned char *); // 在LCD上显示字符串
void LCD_printc(unsigned char); // 在LCD上显示单个字符 #endif LCD1602.c
#include hardware.h
#include lcd1602.h // 检查LCD是否忙碌若忙碌则等待其空闲
void LCD_check_busy(void)
{ while(1) { LCD_EN 0; LCD_RS 0; LCD_RW 1; LCD_DATA 0xff; LCD_EN 1; if (!LCD_BUSY) break; // 若LCD不忙碌则跳出循环 } LCD_EN 0;
} // 清屏函数用于清除LCD上的显示内容
void LCD_cls(void)
{ LCD_check_busy(); // 首先检查LCD是否忙碌 LCD_RS 0; LCD_RW 0; LCD_DATA 1; // 发送清屏指令 LCD_EN 1; LCD_EN 0;
} // 向LCD写入指令
void LCD_write_instruction(unsigned char LCD_instruction)
{ LCD_check_busy(); // 检查LCD是否忙碌 LCD_RS 0; LCD_RW 0; LCD_DATA LCD_instruction; // 设置要写入的指令 LCD_EN 1; LCD_EN 0;
} // 向LCD写入数据
void LCD_write_data(unsigned char LCD_data)
{ LCD_check_busy(); // 检查LCD是否忙碌 LCD_RS 1; LCD_RW 0; LCD_DATA LCD_data; // 设置要写入的数据 LCD_EN 1; LCD_EN 0;
} // 设置LCD的显示位置
void LCD_set_position(unsigned char x)
{ LCD_write_instruction(0x80 x); // 通过写入指令来设置显示位置
} // 向LCD打印单个字符
void LCD_printc(unsigned char lcd_data)
{ LCD_write_data(lcd_data); // 写入要打印的字符数据
} // 向LCD打印字符串
void LCD_prints(unsigned char *lcd_string)
{ unsigned char i 0; while (lcd_string[i] ! 0x00) // 遍历字符串直到遇到结束符\0 { LCD_write_data(lcd_string[i]); // 写入字符串中的每个字符 i; }
} // 初始化LCD
void LCD_initial(void)
{ LCD_write_instruction(LCD_AC_AUTO_INCREMENT | LCD_MOVE_DISENABLE); // 设置地址计数器自动增加禁止显示移动 LCD_write_instruction(LCD_DISPLAY_ON | LCD_CURSOR_OFF); // 开启显示关闭光标 LCD_write_instruction(LCD_DISPLAY_DOUBLE_LINE); // 设置为双行显示模式 LCD_cls(); // 清屏
} hardware.h
#include reg51.h #ifndef __HARDWARE_H__
#define __HARDWARE_H__ #define LCD_DATA P1 // 将LCD的数据线定义为P1端口 sbit LCD_BUSYLCD_DATA^7; // 将LCD的BUSY位定义为P1.7用于检测LCD是否忙碌
sbit LCD_RWP2^0; // 将LCD的读写控制位定义为P2.0用于控制读写操作
sbit LCD_RSP2^1; // 将LCD的寄存器选择位定义为P2.1用于选择数据寄存器或指令寄存器
sbit LCD_ENP2^2; // 将LCD的使能位定义为P2.2用于控制LCD的使能信号 #endif
main.c
#includereg51.h
#includeLCD1602.h void main(void)
{LCD_initial();LCD_set_position(0);LCD_printc(G);LCD_prints(hello gayboys);LCD_set_position(0x40);LCD_printc(G);while(1){;}
} 构建Hex文件
在构建之前需要先确定下有没有将文件正确导入到项目中双击下项目文件夹即可 随后即可点击魔法棒图标将 Create HEX File 构建hex文件 在 Project 栏点击 Build target 对项目进行构建 构建成功 ! 运行项目 这时候就可以回到Proteus中了双击AT89C51芯片在 Program File 中添加刚刚构建的hex文件 点击左下角的小箭头运行项目 运行成功Gay Away !!!