一.LCD1602
LCD1602功能函数
1)引脚定义:P0为数据端口引脚
#include <REGX52.H>
//引脚定义
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_E=P2^7;
#define LCD_DataPort P0
2)写指令(0为指令,1为数据)
/**
* @brief LCD1602写命令
* @param Command 要写入的命令
* @retval 无
*/
void LCD_WriteCommand(unsigned char Command)
{
LCD_RS=0;
LCD_RW=0;
LCD_DataPort=Command;
LCD_E=1;
LCD_Delay();
LCD_E=0;
LCD_Delay();
}
3)写数据(改33为1即可)
/**
* @brief LCD1602写数据
* @param Data 要写入的数据
* @retval 无
*/
void LCD_WriteData(unsigned char Data)
{
LCD_RS=1;
LCD_RW=0;
LCD_DataPort=Data;
LCD_E=1;
LCD_Delay();
LCD_E=0;
LCD_Delay();
}
4)初始化
/**
* @brief LCD1602初始化函数
* @param 无
* @retval 无
*/
void LCD_Init(void)
{
LCD_WriteCommand(0x38);
LCD_WriteCommand(0x0C);
LCD_WriteCommand(0x06);
LCD_WriteCommand(0x01);
}
6)显示数据,光标地址
/**
* @brief LCD1602设置光标位置
* @param Line 行位置,范围:1~2
* @param Column 列位置,范围:1~16
* @retval 无
*/
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{
if(Line==1)
{
LCD_WriteCommand(0x80|(Column-1));
}
else
{
LCD_WriteCommand(0x80|(Column-1)+0x40);
}
}
6)显示字符串(在显示屏显示出来)
/**
* @brief 在LCD1602指定位置开始显示所给字符串
* @param Line 起始行位置,范围:1~2
* @param Column 起始列位置,范围:1~16
* @param String 要显示的字符串
* @retval 无
*/
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char *String)
{
unsigned char i;
LCD_SetCursor(Line,Column);
for(i=0;String[i]!='\0';i++)
{
LCD_WriteData(String[i]);
}
}
7)无符号整数显示(光标位置可以独立出来)
/**
* @brief 返回值=X的Y次方
*/
int LCD_Pow(int X,int Y)
{
unsigned char i;
int Result=1;
for(i=0;i<Y;i++)
{
Result*=X;
}
return Result;
}
...........类推
二.PWM电机
1)直流电机、电机匀速控制,转1毫秒停1毫秒或其他的设置;频率快就不会出现抖动,比较平缓,频率慢会出现抖动;Ton打开时间、Toff关闭时间、Ts总时间;占空比高: 高电平长低电平端、占空比低: 高电平短,低电平长 (周期一样);
电机驱动电路
LED呼吸灯/直流电机调速
数码管、定时器、按键、延时模块的代码拿过来;计数<比较值,输出0,计数>比较值,输出1(自己设置的,这里以这个为例)控制占空比可以用比较值控制
定时器初始化,(频率)10K-20K不会产生鸣叫声,运行稳定
三.AD/DA
1. AD:模拟-数字转换,将模拟信号转换为计算机可操作的数字信号
DA:数字-模拟转换,将计算机输出的数字信号转换为模拟信号
2.硬件电路模型
AD转换通常有多个输入通道,用多路选择开关连接至AD转换器,以实现AD多路复用的目的,提高硬件利用率
AD/DA与单片机数据传送可使用并口(速度快、原理简单),也可使用串口(接线少、使用方便)
可将AD/DA模块直接集成在单片机内,这样直接写入/读出寄存器就可进行AD/DA转换,单片机的IO口可直接复用为AD/DA的通道
四.完成51智能小车选型
硬件电路模型