怎样将51单片机实验板的按键信号传给PC啊。比如按一个键,51给PC发送一个'a'字符。

怎样将51单片机实验板的按键信号传给PC啊。比如按一个键,51给PC发送一个'a'字符。,第1张

我给你段程序,我写的,还有上位机的,一个数据采集与控制的,有你需要东西,这里有照片http://wwwbaiducom/p/tm790116from=super

这是初始化程序

;--------------------------------------------------

;

初始化程序

;--------------------------------------------------

CSH:

NOP

NOP

MOV

R0,#38H

MOV

R1,#8

MOV

A,#00H

CSHH:

MOV

@R0,A

INC

R0

DJNZ

R1,CSHH

MOV

20H,#0FFH

;按键数据

MOV

2DH,#0FFH

;输出控制

MOV

4FH,#01H

;本机地址号

MOV

40H,#01H

;查询指针

;----------串口初始化----------

;定时器工作设置

MOV

TMOD,#20H;T1为模式2

MOV

TH1,#0F3H;波特率为2400

MOV

TL1,#0F3H

;串口设置

MOV

SCON,#50H;UART工作在MODE1,SM1=1

REN=1

;程序参数初始化

SETB

TR1

MOV

IE,#100100000B

SETB

ES

SETB

EA

SETB

TR1

JMP

ZCX

MOV

P2,#00H

MOV

R3,#00

MOV

49H,#1DH

CS2:

MOV

R0,#30H

MOV

48H,#08H

CS1:

NOP

MOV

A,R3

MOV

@R0,A

INC

R0

DJNZ

48H,CS1

MOV

4AH,#70H

CS3:

NOP

CALL

DSPLAY

DJNZ

4AH,CS3

INC

R3

DJNZ

49H,CS2

MOV

30H,#0AH

MOV

31H,#19H

MOV

32H,#08

MOV

33H,#09

MOV

34H,#0CH

MOV

35H,#05

MOV

36H,#02

;--------------------------------------------------

;

主程序程序

;--------------------------------------------------

ZCX:

NOP

;

CALL

DSPLAY

;调用显示子程序

CALL

CXCX

;调用查询子程序

NOP

;

JNB

P37,BDYX

;本地还是远程控制

JMP

ZCX1

;

BDYX:

NOP

;JNB

P37,BDYX

CALL

KEY

;本地是否有按键动作

MOV

P1,20H

;

CALL

BJ

;高用比较子程序

ZCX1:

JMP

ZCX

这是串口发通信子程序

;-----------------------------------------------

;串口中断处理程序

;-----------------------------------------------

CKZD:

NOP

;串口中断

CLR

EA

JBC

RI,UART

;

CLR

TI

;

JMP

FSCX

;

UART:

MOV

R6,#07

;接收八位数据

MOV

R0,#50H

;

TXCL:

CLR

RI

;

MOV

@R0,SBUF

;第一位数

是否为本机地址,是则接收数据,不是则退出

MOV

R3,#250

;是否是干扰信号是则退出

TXYS1:

MOV

R4,#250

;

TX1:

JB

RI,TX2

;

DJNZ

R4,TX1

;

DJNZ

R3,TXYS1

;

JMP

UARTCK11

;

TX2:

INC

R0

;

MOV

@R0,SBUF

;数据存入50-57H

CLR

RI

;

DJNZ

R6,TX1

;

MOV

A,50H

CJNE

A,#1BH,UARTCK11

;联络信号

MOV

A,4FH

;50H为本机地址号

CJNE

A,51H,UARTCK11

;判断是否为本机,是则下行,不是则放弃处理

MOV

A,52H

;第一位数为指令

CJNE

A,#01H,UART1

;指令为1是显示复制子程序

CALL

XSFZ

;显示复制子程序

JMP

UARTCK11

;

UART1:

CJNE

A,#02H,UART2

;

MOV

54H,2DH

;

JMP

FSCX

;

UART2:

CJNE

A,#03H,UART3

;

MOV

20H,54H

;

MOV

2DH,54H

JMP

UARTCK11

;

UART3:

UARTCK11:

SETB

EA

RETI

还有什么问题,可以加我,291918938

使用51单片机,12M晶振,LCD1206液晶显示屏显示

#include"reg52h" //头文件

#define uint unsigned int

#define uchar unsigned char

int humi,temp,check;

uchar n,Readflag; //定义全局变量

sbit SPI = P1^1;

sbit RS = P2^4;

sbit RW = P2^5;

sbit EN = P2^6; //定义端口

void delayms(uchar ms);

void Init_Timer0(void); //函数声明

void write_com(uchar com) //LCD1206端口写函数

{

RS=0;

P0=com;

delayms(5);

EN=1;

delayms(5);

EN=0;

}

void write_data(uchar date) //LCD1206数据写函数

{

RS=1;

P0=date;

delayms(5);

EN=1;

delayms(5);

EN=0;

}

void LCD1602_init() //LCD1206初始化函数

{

RW=0;

EN=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

}

void Display_Humi(int v,unsigned char position) ////////////湿度显示函数

{

int shu;

write_com(position);

write_data('R');

write_data('H');

shu=v%100/10;

write_data(shu+'0');

shu=v%10;

write_data(shu+'0');

write_data('%');

}

void Display_Temp(int v,unsigned char position) ///////////温度显示函数

{

int shu;

write_com(position);

write_data('T');

write_data('e');

write_data('m');

write_data('p');

write_data(':');

shu=v%100/10;

write_data(shu+'0');

shu=v%10;

write_data(shu+'0');

write_data(0xdf);

write_data('C');

}

void Display_Check(int v,uchar position) //校验位显示函数

{

int shu;

write_com(position);

write_data('C');

write_data('h');

write_data('e');

write_data('c');

write_data('k');

write_data(':');

shu=v/100;

write_data(shu+'0');

shu=v%100/10;

write_data(shu+'0');

shu=v%10;

write_data(shu+'0');

}

void delayms(uchar ms) //精确延时毫秒级函数

{

uchar i;

while(ms--)

{

for(i=0;i<120;i++);

}

}

void delayus(uchar us) //精确延时微秒级函数

{

while(us--);

}

void DHT_Rst() //DHT11启动函数

{

SPI=0; //主机拉低总线18ms以上

delayms(20);

SPI=1; //主机拉高总线约30us

delayus(14);/// 20-40us

while(SPI); //等待DHT11响应

while(!SPI); //等待DHT11拉高总线

}

uchar Readbit() //读一位程序

{

while(SPI);//等待总线变为低电平

while(!SPI);//等待总线变为高电平

delayus(5);//等待10us,执行下几条程序使用约20us

if(SPI)

return 1;

else

return 0; //////判断SPI总线状态,返回0或1

}

uchar Readbyte() //读一个字节程序

{

uchar i,dat;

dat=0;

for(i=0;i<8;i++) //重复读取8位数据

{

dat=dat<<1; //dat左移一次,总共8次

dat=Readbit()|dat; //dat和返回值,按位或

}

return dat; //返回dat

}

void ReadDHT() //读DHT11温湿度传感器

{

uchar buf[5],i; //定义临时变量

DHT_Rst(); //初始化传感器

for(i=0;i<5;i++) //读5字节,共40位

buf[i]=Readbyte();

SPI=1; //通讯结束,拉高总线

if(buf[0]+buf[1]+buf[2]+buf[3]==buf[4])//数据校验

{

humi=buf[0];//湿度值

temp=buf[2];//温度值

check=buf[4];//校验位值,校验位=湿度值+温度值(小数位为零)

}

}

void main() //主函数

{

Init_Timer0(); //初始化定时器

Readflag=0; //读标志位为0

LCD1602_init(); //初始化LCD1602液晶显示屏

while(1) //主循环

{

if(Readflag==1) //验证是否读

{

Readflag=0; //重置读标志位

ReadDHT(); //读一次DHT11

}

Display_Temp(temp,0x80);

Display_Humi(humi,0x8A);

Display_Check(check,0xc0); /////显示值

}

}

void Init_Timer0(void) //定时器初始化函数

{

TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

EA=1; //总中断打开

ET0=1; //定时器中断打开

TR0=1; //定时器开关打开

}

void Timer0_isr(void) interrupt 1 //定时器中断服务程序

{

static unsigned int num;

TH0=(65536-10000)/256; //重新赋值 10ms

TL0=(65536-10000)%256;

num++;

if(num==20) //大致200ms

{

num=0;

Readflag=1; //激活读命令

}

}

纯手打,望采纳

1、先按“取消/恢复键”解锁屏幕。

2、再按“校时”按钮校对小时,然租局后按“校分”按钮校对分物铅钟,再按“校星期”校对星期。

3、再按“定时”按钮,来设置开关罩型好机时间。

4、按“自动/手动”按钮调至自动,就可以定时开关机了,设置完毕,按“取消/恢复”即可。

如何读取1秒钟编码器脉冲个数

什么叫1秒钟编码器?1秒钟产生一个脉冲,1秒钟旋转1圈? 如果是1秒钟产生一个脉冲,那么完全可以不用高速计数器,假如输入为i00 ldi00 eu incwvw100 就可以了 如果是1秒钟旋转1圈,那么要采用高速计数器 根据编码器的类型(增量式还是正交式)及硬件接线来选择工作模式,具体请参照《S7-200可编程序控制器》 如果是第一次使用高速计数器,那么建议采用向导完成 补充 ldsm05 eu movdHC(使用的高计),vd100 sm05是一个秒脉冲,采用上升沿是1s读取一次数据在vd100

利用T32或T96中断,读取每秒脉冲数,然后再复位!

建议你用SM05计时,SM05ON为一个计数周期并驱动中断程序给相应的HC复位,之前SM05上升沿将HC的值送入你的存储变量DW中HC定义为9,控制字为HEC

定时读取编码器脉冲个数,时间一定要准,所以采用定时中断读取是最合理的.建议使用SMB34定时中断去读.

将编码器每圈脉冲个数(一般为1024个)×每秒转速

如果编码器在一秒钟内发出的最大脉冲数小于65535个,建议你用定时器T32或T96的定时中断功能控制高速计数器读取编码器的脉冲数。T32、T96可以在32秒钟范围内定时。高速计数器的最大计数范围可以设置为FFFF。在中断程序中读取计数值,并对高速计数器清零,让其重新开始计数。 如果脉冲数大于65535个,则需要缩短定时,分数次读取后累加;或则采用数学方法计算出1秒钟的脉冲数。

-------------------

不知道你用的是哪个品牌的PLC。

有的PLC有一条测频指令(SPD)

要是你的脉冲频率基本固定的话,也可以自己做一段程序,比如做一个定时中断,每次中断计算一下脉冲数的变化,然后定时中断的时间长除以脉冲数就是每个脉冲的时间。

因为你是初次使用, 有漏洞, 当然"不运作"啦!!

1 电源线/插头插上了吗

2 星期设置有木有错 135, 还是246, 还是每天

3 家用电器接上并且电源开关处于"ON"了吗

4 还要将光标"手动/自动"调到"自动"位置!!(如果是DHC16定时器,置于"AUTO OFF")

使用定时器充电对电池没有影响,需要使用得当。

前提是,应该把定时器的时间设置掌握好,骑行多少里程后,定时多少小时,对于充电器不能转灯的情况是有好处的。可以避免过冲。

如果电瓶和充电器都正常,充电结束能够转灯的,使用定时器也没有妨碍,把时间定的稍有富余,转灯以后,定时器可以把充电器电源关闭,所不利的方面,有时,不知道定时多少,可能出现没有充电完成就断电。因此,客观讲,使用定时器,利与弊是因人而异的。

欢迎分享,转载请注明来源:品搜搜测评网

原文地址:https://pinsoso.cn/meirong/3503596.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2024-03-01
下一篇2024-03-01

随机推荐

  • 身体乳哪个牌子好,求推荐

    以下是多位用户对各身体乳产品的使用评价,希望能够帮助到您:1 凡士林润肤乳:使用感很棒,气味是高级香水香氛,非常清爽好推开和好吸收,皮肤嫩嫩滑滑没有黏腻感,肉眼就可以看到肌肤细腻不少,皮肤也会变白。2 香奈儿邂逅清新身体乳:头香是清新茉莉花

    2024-04-15
    56100
  • 苏秘37度适合什么年龄?苏秘37度适合什么肤质?

    苏秘37度这个品牌是比较高端的一个护肤品牌,其实苏秘37度是行过LG旗下的,苏秘37度的产品都是纯天然成分的,现在纯天然的护肤品是非常时候欢迎,它们家的产品比较温和,也适合敏感肌肤使用,那苏秘37度适合什么年龄?苏秘37度适合什么肤质?1、

    2024-04-15
    51900
  • 伊思红参水乳适合哪个年龄

    伊思红参水乳也是比较好的一款护肤品,那你知道哪个年龄层的人更适合用伊思红参水乳吗下面我们就一起来看看伊思红参水乳适合哪个年龄吧!伊思红参水乳中有红参提取物,这种物质有很好的紧致抗皱作用,所以更适合30岁以上的熟龄肌肌肤。因为这个年龄层次的肌

    2024-04-15
    50600
  • 神仙水和清莹露区别

    神仙水和清莹露区别如下:1、质地不同神仙水的质地是清爽不粘稠,水状;清莹露的质地是透亮清澈的水状,触感顺滑轻薄,水润感十足,没有香味。2、效果不同神仙水是一种精华水,化妆水后使用,上脸吸收快,不油腻,对闭口有一定作用,长期使用可以稳定肌肤,

    2024-04-15
    41200
  • 在那能买到正品的妮维雅止汗珠

    您好,止汗珠属于爽身香体的一种,让爽身香体专家——舒耐来为您解答吧!一般的爽身香体产品在全国的屈臣氏、万宁及家乐福等大型卖场都有售卖,如果你所在的地区没有这些门店的话,建议你可以上品牌天猫旗舰店、京东或者1号店购买,期待您对舒耐的关注!很抱

    2024-04-15
    46700
  • 伊思特衣柜可以吗?怎么感觉有些贵啊

    我在福州定做的,将近三个月了还没有拿到货,卖家的客服是采用一再欺骗的说法忽悠客户,说某个时间会到事实又没到。设计师存在总价多算,发现了多余的钱也是迟迟未退到账,一个多月还没到账。想定的业主请三思,公司体制不透明,让人捏了一把汗。最重要的事没

    2024-04-15
    40600
  • 哪个牌子的防晒霜效果最好

    哪个牌子的防晒霜效果最好  哪个牌子的防晒霜效果最好,被天气摧残的脸是可以通过护肤改善的,改变皮肤状况也会让我们更加健康,简简单单就能完成,轻轻松松就可以打造完美妆容,学会哪个牌子的防晒霜效果最好,技巧

    2024-04-15
    47600

发表评论

登录后才能评论
保存