怎样将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
    49900
  • 妮维雅的这款男士洗面奶如何

    妮维雅男士洗面奶是一款针对男性肌肤的产品,主要成分包括茶树油、海藻、矿物质等天然植物提取物,以及氨基酸表面活性剂。这些成分具有一定的清洁、舒缓和抗氧化的功效,可以有效地改善男性肌肤的状态。该洗面奶的清洁能力非常出色,可以深层清洁肌肤,去除污

    2024-04-15
    49300
  • 天气太套盒里面那个棍儿是干嘛用的

    天气丹的小勺子是用来取用护肤品, 尤其是眼霜的,因为眼霜每次只需要点涂一点点就能让眼周的肌肤得到充分的滋润,如果用手蘸取, 可能会涂抹过多,造成浪费的同时还有可能导致眼角产生脂肪粒,影响使用效果,所以使用小勺子可以很好地掌控。天气丹套盒是用

    2024-04-15
    44100
  • 泰国防晒霜哪个牌子的防晒效果好

    瑞士HT防晒关于泰国的防晒霜能不能给我推荐几款我用过香蕉防晒去泰国留学,买那种防晒霜?什么牌子的比较好?我在泰国呆过三个月,我妈去过一年,那边虽然在热带,但太阳没有想象中的大,阴天挺多的。那边潮_才是最重要的。尤其是雨季。因为出门基本都要带

    2024-04-15
    47500
  • 谁推荐几个最好的眼霜牌子

    推荐:The Body Shop美体小铺接骨木花眼胶15ml(戴妃最爱)(祛除黑眼圈眼袋浮肿)The Body Shop美体小铺VE眼霜15ml(保湿滋润不油腻不起脂肪粒除黑眼圈眼袋浮肿细纹) 原装进口欧莱雅复颜双重提拉眼部

    2024-04-15
    28400
  • 妮维雅防晒乳怎么样?妮维雅防晒乳使用方法

    妮维雅这个品牌大家应该并不陌生,很多人都用过妮维雅的产品,妮维雅的产品种类也比较多,它们家的防晒霜在平价市场中一直都是很受欢迎的,妮维雅的防晒霜确实值得推荐,价格也不贵,防晒效果也还不错,那妮维雅防晒乳怎么样?妮维雅防晒乳使用方法1、按压装

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

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

    2024-04-15
    34300

发表评论

登录后才能评论
保存