历史上的今天
今天是:2024年11月09日(星期六)
2019年11月09日 | 单片机测速与1602显示程序与电路
2019-11-09 来源:51hei
STC12C单片机控制
光传感器测速
PWM控制直流电机
部分代码预览:
#include"mytype.h" //包含总合的头文件
#define DATA P2 //定义P0口为数据端
//定义按键I/O口
sbit key0=P0^6; //正反转、停止模式切换按键
sbit key1=P0^7; //加速按键
sbit key2=P0^2;
sbit key3=P0^1; //减速按键
//sbit PWM=P0^0;
//****************
uchar table2[16]=" _DGUT_ ";//第1行液晶显示
uchar table1[16]= "000 Chen ZiXing";//第2行液晶显示
uchar number_table[10]="0123456789";
sbit lcden=P3^2;//液晶使能端
sbit lcdrs=P3^5;//液晶读写控制端
sbit wela=P3^3;
//uchar number;
uchar ge=0,shi=0,bai=0;
//****************
//定义全局变量flag=0,
uchar speed=0,speed1=0; //正反转的标志位,0停止,1正转,2反转
uint num; //定时器1的计数变量
int quan;
void delay(uint z)//延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=310;y>0;y--);
}
void write_com(uchar com)//液晶写地址函数
{
lcdrs=0;
P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)//液晶写数据函数
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()//液晶初始化函数
{
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void Lcd_display()//液晶显示函数,主要是刷新转速专用
{
uint i;
table1[0]=number_table[bai];
table1[1]=number_table[shi];
table1[2]=number_table[ge];
write_com(0x80+0x40);
for(i=0;i<3;i++)
{
write_data(table1[i]);
delay(1);
}
}
void main()
{
uchar number;
time_init(); //定时器初始化
PWM_Init(); //PWM初始化
UART1_Init(9600);//串口初始化
DATA=0x00; //数据端初始化为0
init();
write_com(0x80);
for(number=0;number<16;number++)
{
write_data(table2[number]);
delay(10);
}
write_com(0x80+0x40);
for(number=0;number<16;number++)
{
write_data(table1[number]);
delay(10);
}
PWM_SET(46,0);//进去先让电机速度为零
while(1)
{
keyscan(); //按键扫描
/******用定时器1计算时间,每1秒算一次速度直接显示*******/
if(num>=20)//num 是T1计数器计数变量,numG=20时为1秒
{
TR0=0;TR1=0;//关定时器0/1中断
num=0;//计数变量清零
ge=quan%10;quan=quan/10;
shi=quan%10;quan=quan/10;
bai=quan%10;
Lcd_display(); //LCD显示控制
quan=0;//圈数记录清零
TR1=1;TR0=1; //开定时器0/1中断
}
/*******************************************************************/
}
}
void time_init()
{
TMOD=0x15; //设置定时器0为计数模式,定时器1为定时模式,都为工作方式1
TH0=(65536-1)/256;
TL0=(65536-1)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
ET1=1; //开定时器1中断
TR1=1; //启动定时器1
EA=1; //开启总中断
}
//*************************************************************//
//函数:keyscan()
//功能:实现按键扫描、同时控制电机速度
//
//////********************************************************//
void keyscan()
{
if(key0==0||key1==0||key2==0)
{
delay_ms(10);//延时去抖
if(key0==0)
{
UART1_SendStr("a");
if(speed<9)speed++;
else if(speed1<9){speed=0;speed1++;}
// else speed=9;
PWM_SET(speed1*10+speed,0);
while(!key0);
}
else if(key1==0)
{
UART1_SendStr("q");
if(speed>0)speed--;
else if (speed1>0){speed1--;speed=9;}
PWM_SET(speed1*10+speed,0);
while(!key1);
}
else if(key2==0)
{
UART1_SendStr("key2");
while(!key2);
}
write_com(0x80);
write_data(number_table[speed1]);
write_data(number_table[speed]);
}
}
史海拾趣
|
摘要:数字信号处理器具有高效的数值运算能力,并能提供良好的开发环境,而可编程逻辑器件 具有高度灵活的可配置性。本文描述了通过采用TMS320C32浮点DSP和可编程逻辑器件(FPGA)的组合运用来构成高速高速高精运动控制器,该系统通过B样条插值算 ...… 查看全部问答> |
|
运用ISD1760芯片的录音功能来录制其他遥控发出的红外波,以此原理设计一个万能遥控。 重点需要研究的问题: ISD1760录音、无线收发模块。 麻烦大家给个思路,,参考·· ...… 查看全部问答> |
|
下载NK到开发板后执行,到最后一部应该显示如下红色部分代码时却执行不下去了。请问怎样才能检测内核程序是死在 哪里了? ERROR: OALIntrReleaseSysIntr: Invalid sysIntr value 0 UfnClientLib!UfnCheckPID: WARNING -- using MS reference pl ...… 查看全部问答> |
|
excle表格批注弹出说明形式,写程序时方便查询,可与芯片手册配合使用,发个简图: < 十六进制地址名 称功 能位7位6位5位4位3位2位1位0 ...… 查看全部问答> |
|
现在我使用STM32已经可以进入到stop模式,也可以使用RTCAlarm_IRQn唤醒,但是我发现一个问题,我设置的rtc alarm唤醒时间为1秒中,使用指令为RTC_SetAlarm(RTC_GetCounter()+1);但是唤醒时间却变成了2秒唤醒一次。我试着将时间修改成3秒、5秒,测试 ...… 查看全部问答> |




