51单片机使用T0和T1外部脉冲计数,C语言如何编程?
答案:4 悬赏:40 手机版
解决时间 2021-03-15 11:57
- 提问者网友:泪痣哥哥
- 2021-03-14 17:46
51单片机使用T0和T1外部脉冲计数,C语言如何编程?
最佳答案
- 五星知识达人网友:夜余生
- 2021-03-14 18:29
1、使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,
--统计脉冲个数,用外部中断更好。
--T0和T1,留着定时用。
用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转。
2、例程:
#include
sbit k1 = ?; //自己定义
sbit k2 = ?
sbit k3 = ?
sbit k4 = ?
sbit DIAN1 = ?
sbit DIAN2 = ?
sbit DIAN3 = ?
sbit DIAN4 = ?
sbit SEN1 = ?
sbit SEN2 = ?
void delay(unsigned int x)
{
unsigned int m, n;
for(m = x; m > 0; m--) for(n = 115; n > 0; n--);
}
void main(void)
{
TMOD = 0x55;
IE = 0x8a;
while(1) {
if (!k1) {
delay(10);
if (!k1) {
while(!k1);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 0; DIAN2 = 1;
SEN1 = 1;
TR0 = 1;
}
}
if (!k2) {
delay(10);
if (!k2) {
while(!k2);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 1; DIAN2 = 0;
SEN1 = 1;
TR0 = 1;
}
}
if (!k3) {
delay(10);
if (!k3) {
while(!k3);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 0; DIAN4 = 1;
SEN2 = 1;
TR1 = 1;
}
}
if (!k4) {
delay(10);
if (!k4) {
while(!k4);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 1; DIAN4 = 0;
SEN2 = 1;
TR1 = 1;
}
}
}
}
--统计脉冲个数,用外部中断更好。
--T0和T1,留着定时用。
用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转。
2、例程:
#include
sbit k1 = ?; //自己定义
sbit k2 = ?
sbit k3 = ?
sbit k4 = ?
sbit DIAN1 = ?
sbit DIAN2 = ?
sbit DIAN3 = ?
sbit DIAN4 = ?
sbit SEN1 = ?
sbit SEN2 = ?
void delay(unsigned int x)
{
unsigned int m, n;
for(m = x; m > 0; m--) for(n = 115; n > 0; n--);
}
void main(void)
{
TMOD = 0x55;
IE = 0x8a;
while(1) {
if (!k1) {
delay(10);
if (!k1) {
while(!k1);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 0; DIAN2 = 1;
SEN1 = 1;
TR0 = 1;
}
}
if (!k2) {
delay(10);
if (!k2) {
while(!k2);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 1; DIAN2 = 0;
SEN1 = 1;
TR0 = 1;
}
}
if (!k3) {
delay(10);
if (!k3) {
while(!k3);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 0; DIAN4 = 1;
SEN2 = 1;
TR1 = 1;
}
}
if (!k4) {
delay(10);
if (!k4) {
while(!k4);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 1; DIAN4 = 0;
SEN2 = 1;
TR1 = 1;
}
}
}
}
全部回答
- 1楼网友:佘樂
- 2021-03-14 23:12
网上有很多啊
- 2楼网友:西风乍起
- 2021-03-14 21:41
严重同意楼上意见,用中断来做脉冲计数,安全可靠,不会丢失脉冲。四个按键的处理可以放在程序前面,读取状态后,调用相应的启动,停止之类的子程序。
- 3楼网友:孤独入客枕
- 2021-03-14 20:03
使用T0和T1外部脉冲计数,控制两个电机,到1700个脉冲电机停止,
--统计脉冲个数,用外部中断更好。
--T0和T1,留着定时用。
用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转,怎么用C语言编程?
--编程前,要先设计出来电路。追问电路图是按照上面图片中的电路!T0控制电机1,T1控制电机2,T0和T1通过光电传感器测量脉冲,到1700个脉冲电机停止。追答#include
sbit k1 = ?; //楼主自己定义吧
sbit k2 = ?
sbit k3 = ?
sbit k4 = ?
sbit DIAN1 = ?
sbit DIAN2 = ?
sbit DIAN3 = ?
sbit DIAN4 = ?
sbit SEN1 = ?
sbit SEN2 = ?
void delay(unsigned int x)
{
unsigned int m, n;
for(m = x; m > 0; m--) for(n = 115; n > 0; n--);
}
void main(void)
{
TMOD = 0x55;
IE = 0x8a;
while(1) {
if (!k1) {
delay(10);
if (!k1) {
while(!k1);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 0; DIAN2 = 1;
SEN1 = 1;
TR0 = 1;
}
}
if (!k2) {
delay(10);
if (!k2) {
while(!k2);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 1; DIAN2 = 0;
SEN1 = 1;
TR0 = 1;
}
}
if (!k3) {
delay(10);
if (!k3) {
while(!k3);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 0; DIAN4 = 1;
SEN2 = 1;
TR1 = 1;
}
}
if (!k4) {
delay(10);
if (!k4) {
while(!k4);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 1; DIAN4 = 0;
SEN2 = 1;
TR1 = 1;
}
}
}
}
字数超出最大允许值,请删减!
还有两个中断函数。
但是,百度不让写了。
--统计脉冲个数,用外部中断更好。
--T0和T1,留着定时用。
用四个按键控制,按键1控制电机正转,按键2控制电机反转,按键3控制电机1正转,按键4控制电机2正转,怎么用C语言编程?
--编程前,要先设计出来电路。追问电路图是按照上面图片中的电路!T0控制电机1,T1控制电机2,T0和T1通过光电传感器测量脉冲,到1700个脉冲电机停止。追答#include
sbit k1 = ?; //楼主自己定义吧
sbit k2 = ?
sbit k3 = ?
sbit k4 = ?
sbit DIAN1 = ?
sbit DIAN2 = ?
sbit DIAN3 = ?
sbit DIAN4 = ?
sbit SEN1 = ?
sbit SEN2 = ?
void delay(unsigned int x)
{
unsigned int m, n;
for(m = x; m > 0; m--) for(n = 115; n > 0; n--);
}
void main(void)
{
TMOD = 0x55;
IE = 0x8a;
while(1) {
if (!k1) {
delay(10);
if (!k1) {
while(!k1);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 0; DIAN2 = 1;
SEN1 = 1;
TR0 = 1;
}
}
if (!k2) {
delay(10);
if (!k2) {
while(!k2);
TH0 = (65536 - 1700) / 256;
TL0 = (65536 - 1700) % 256;
SEN1 = 0;
DIAN1 = 1; DIAN2 = 0;
SEN1 = 1;
TR0 = 1;
}
}
if (!k3) {
delay(10);
if (!k3) {
while(!k3);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 0; DIAN4 = 1;
SEN2 = 1;
TR1 = 1;
}
}
if (!k4) {
delay(10);
if (!k4) {
while(!k4);
TH1 = (65536 - 1700) / 256;
TL1 = (65536 - 1700) % 256;
SEN2 = 0;
DIAN3 = 1; DIAN4 = 0;
SEN2 = 1;
TR1 = 1;
}
}
}
}
字数超出最大允许值,请删减!
还有两个中断函数。
但是,百度不让写了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯