资源简介
智能小车寻迹(含霍尔测速)程序,用L5261602液晶动态显示速度,路程
代码片段和文件信息
#include
#include
/////////////////////////////////////////////////////////////////////
#define U8 unsigned char
#define U16 unsigned int
////////////////电机运动方式定义////////////////////////////////////
#define Zrun {int1=1;int2=0;int3=1;int4=0;} //直走
#define Rz {int1=0;int2=0;int3=1;int4=0;} //左转
#define Lz {int1=1;int2=0;int3=0;int4=0;} //右转
/*-----------------------端口命名------------------------*/
sbit rs=P1^0; //LCD的数据/命令选择端
sbit rw=P1^1; //LCD的读写选择端
sbit lcdcs=P1^2;//LCD的使能信号端
sbit int1=P2^0;
sbit int2=P2^1;
sbit int3=P2^2;
sbit int4=P2^3;
sbit in1 =P2^4;
sbit in2=P2^5;
sbit in3=P2^6;
sbit in4=P2^7;
///////////////函索声明///////////////////////////////////////////
void DelayMs(U8 ms);
void xz();
/*-------------------------------------------------------*/
/*-----------------------定义参数------------------------*/
U16 ijzzhuanmsecx=0s=0; //定义参数
U8 display[]={“ Vs= cm/500ms“}; //定义显示参数
U8 display1[]={“ s= cm“}; //定义显示参数
/*-------------------------------------------------------*/
////////////////////主函数入口////////////////////////////
sfr CCON = 0xD8; //PCA控制寄存器
sfr CMOD = 0xD9; //PCA模式寄存器
sfr CCAPM0 = 0xDA; //PCA模块0模式寄存器 //模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)
sfr CCAPM1 = 0xDB; //PCA模块1模式寄存器 //模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)
sfr CL = 0xE9; //PCA 定时寄存器 低位
sfr CH = 0xF9; //PCA 定时寄存器 高位
sfr CCAP0L = 0xEA; //PCA模块0的 捕获寄存器 低位
sfr CCAP0H = 0xFA; //PCA模块0的 捕获寄存器 高位
sfr CCAP1L = 0xEB; //PCA模块1的 捕获寄存器 低位
sfr CCAP1H = 0xFB; //PCA模块1的 捕获寄存器 高位
sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0
sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1
sbit CF = 0xDF; //PCA计数溢出标志位
sbit CR = 0xDE; //PCA计数器 运行控制位
sbit CCF1 = 0xD9; //PCA模块1中断标志
sbit CCF0 = 0xD8; //PCA模块0中断标志
//* CCAPOH = CCAPOL = 0XC0; //模块0输出 占空因数为25%
//* CCAPOH = CCAPOL = 0X80; //模块0输出 占空因数为50%
//* CCAPOH = CCAPOL = 0X40; //模块0输出 占空因数为75%
/*-----------------------毫秒延时------------------------*/
void DelayMs(U8 ms) //在12M晶振下,stc10f系列(单周期指令)的ms级延时
{
U16 i;
while(ms--)
{
for(i=0;i<850;i++);
}
}
void delay(U8 ms)
{
U8 ij; //为延时引入ij两参数
for (j=0;j for (i=0;i<120;i++); //延时第二循环
}
/*-------------------------------------------------------*/
/*--------------------向LCD1602写命令--------------------*/
void write_command(U16 command)
{
rs=0; //选择写命令
P0=command; //向LCD写命令
lcdcs=1; //信号使能端高电平
lcdcs=0; //信号使能端低电平
}
/*-------------------------------------------------------*/
/*--------------------向LCD1602写数据--------------------*/
void write_data(U16 data0)
{
rs=1; //选着写数据
P0=data0; //向LCD写数据
lcdcs=1; //信号使能端高电平
lcdcs=0; //信号使能端低电平
}
/*-------------------------------------------------------*/
/*-------------------外部中断0计数程序-------------------*/
void counter(void) interrupt 0
{
EX0=0; //关外部中断0
//初始化计数
z++; //转圈计数加1
- 上一篇:485门禁例程
- 下一篇:基于51单片机的数字频率计课程设计
评论
共有 条评论