怎样将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

随机推荐

  • 夏天涂防晒霜的正确步骤

    夏天涂防晒霜的正确步骤你知道夏天涂防晒霜的正确步骤是什么样的吗?很多女生刚开始学化妆,还不知道防晒霜应该在什么时候涂。我精心为大家整理了夏天涂防晒霜的正确步骤相关的知识和信息,希望对你有所帮助。

    2024-04-15
    54000
  • 一个人的精神崩溃了会怎么样?、

    生活中有精神支柱崩塌的现象,此时会产生末日感,以前建立起来的立身之基,包括信念、才能、健康、亲情、物质、人脉等等,一时间失去了发挥的平台。在新规则下,它们没有上场的机会,眼看着原先不如自己的人不断地与自己擦身而过走上舞台,而自己成了孤独的观

    2024-04-15
    47800
  • 阿富汉的地理环境,国旗,自然条件,人文特色和宗教文化有什么?

      阿富汗概况  国名: 阿富汗 (Afghanistan)  独立日:8月19日(1919年)  阿富汗新年(阿历):3月21日  独立纪念日:8月19日  开斋节:(每年日期不定,随伊斯兰阴历而变)  古尔邦节:(每年日

    2024-04-15
    47200
  • 珀莱雅精华液的功效 珀莱雅精华液的使用方法

    珀莱雅精华液的好评是很多的,很多人都觉得这款精华液好用,那么珀莱雅精华液的功效是什么呢,珀莱雅精华液的使用方法是什么呢。珀莱雅精华液的功效 这款精华采用了海洋深层水,循环于600米深海领域,可以提供多种肌肤所需要的营养,而且这款精华

    2024-04-15
    56300
  • 姬松茸怎么吃

    问题一:姬松茸有哪些吃法姬松茸(巴西菇)是珍稀菇类佳品,味道鲜美,又因食药兼优,具有“蘑菇之首”之称。它营养丰富,其蛋白质、多糖类是香菇的两倍,它具有益肠健胃、抗肿瘤、脱胆固醇、降血糖、抗血栓、防治痔疮、神经痛、抗病毒、改善动脉硬化等活

    2024-04-15
    45300
  • 妮维雅粉水

    分类:生活 >> 美容塑身问题描述:看到很多网上评论说妮维雅粉水很赞 我的皮肤有点小干 应该适合 上面说有收缩毛孔的作用 可我皮肤挺细的 日常护肤一定要用爽肤水吗? 解析:我是油皮,使用了3瓶了,觉得一

    2024-04-15
    55100
  • 妮维雅630淡斑精华真假

    关于妮维雅630淡斑精华的真假问题,我可以告诉你,这取决于你购买的渠道和产品包装。如果你选择在正规渠道购买,比如官网、专柜或者认可的线上零售商,那么你购买到的产品应该是真品。如果你选择在一些不明来源的小店或者个人手中购买,那么就存在假货风险

    2024-04-15
    24500

发表评论

登录后才能评论
保存