当前位置:首页 > 经验 >

单片机编程100例(单片机编程入门自学100例)

来源:原点资讯(www.yd166.com)时间:2023-10-25 06:24:03作者:YD166手机阅读>>

}

{ BEEP=~BEEP; DelayMS(t); } BEEP=0; }

单片机编程100例,单片机编程入门自学100例(17)

void main() { P1=0xff; BEEP=0; while(1) { if(K1==0) Play(1); if(K2==0) Play(2); if(K3==0) Play(3); if(K4==0) Play(4); } }

46 单片机之间双向通信

/* 名称:甲机串口程序

说明:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。

*/

#include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit LED1=P1^0; sbit LED2=P1^3; sbit K1=P1^7; uchar Operation_No=0; //操作代码 //数码管代码 uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<120;i ); } //向串口发送字符 void Putc_to_SerialPort(uchar c) { SBUF=c; while(TI==0); TI=0; } //主程序 void main() { LED1=LED2=1; P0=0x00; SCON=0x50; //串口模式 1,允许接收 TMOD=0x20; //T1 工作模式 2 PCON=0x00; //波特率不倍增 TH1=0xfd; TL1=0xfd; TI=RI=0; TR1=1; IE=0x90; //允许串口中断 while(1) { DelayMS(100); if(K1==0) //按下 K1 时选择操作代码 0,1,2,3 { while(K1==0); Operation_No=(Operation_No 1)%4; switch(Operation_No) //根据操作代码发送 A/B/C 或停止发送 { case 0: Putc_to_SerialPort('X'); LED1=LED2=1; break; case 1: Putc_to_SerialPort('A'); LED1=~LED1;LED2=1; break; case 2: Putc_to_SerialPort('B'); LED2=~LED2;LED1=1; break; case 3: Putc_to_SerialPort('C'); LED1=~LED1;LED2=LED1; break; } } } } //甲机串口接收中断函数 void Serial_INT() interrupt 4 { if(RI) { RI=0; if(SBUF>=0&&SBUF<=9) P0=DSY_CODE[SBUF]; else P0=0x00; } } /* 名称:乙机程序接收甲机发送字符并完成相应动作 说明:乙机接收到甲机发送的信号后,根据相应信号控制 LED 完成不同闪烁动作。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit LED1=P1^0; sbit LED2=P1^3; sbit K2=P1^7; uchar NumX=-1; //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<120;i ); } //主程序 void main() { LED1=LED2=1; SCON=0x50; TMOD=0x20; //串口模式 1,允许接收 //T1 工作模式 2 TH1=0xfd; //波特率 9600 TL1=0xfd; PCON=0x00; //波特率不倍增 RI=TI=0; TR1=1; IE=0x90; while(1) { DelayMS(100); if(K2==0) { while(K2==0); NumX= NumX; //产生 0~10 范围内的数字,其中 10 表示关闭 SBUF=NumX; while(TI==0); TI=0; } } } void Serial_INT() interrupt 4 { if(RI) //如收到则 LED 则动作 { RI=0; switch(SBUF) //根据所收到的不同命令字符完成不同动作 { }

单片机编程100例,单片机编程入门自学100例(18)

}

}

47 单片机向主机发送字符串

/* 名称:单片机向主机发送字符串 说明:单片机按一定的时间间隔向主机发送字符串,发送内容在虚拟终端显示。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<120;i ); } //向串口发送字符 void Putc_to_SerialPort(uchar c) { SBUF=c; while(TI==0); TI=0; } //向串口发送字符串 void Puts_to_SerialPort(uchar *s) { while(*s!='\0') { Putc_to_SerialPort(*s); s ; DelayMS(5); } } //主程序 void main() { uchar c=0; SCON=0x40; //串口模式 1 TMOD=0x20; //T1 工作模式 2 TH1=0xfd; //波特率 9600 TL1=0xfd; PCON=0x00; //波特率不倍增 TI=0; TR1=1; DelayMS(200); //向主机发送数据 Puts_to_SerialPort("Receiving From 8051...\r\n"); Puts_to_SerialPort("-------------------------------\r\n"); DelayMS(50); while(1) { Putc_to_SerialPort(c 'A'); DelayMS(100); Putc_to_SerialPort(' '); DelayMS(100); if(c==25) //每输出一遍后加横线 { Puts_to_SerialPort("\r\n-------------------------------\r\n"); DelayMS(100); } c=(c 1)&; if(c==0) { //每输出 10 个字符后换行 Puts_to_SerialPort("\r\n"); DelayMS(100);

单片机编程100例,单片机编程入门自学100例(19)

} } }

48 单片机与 PC 通信

/* 名称:单片机与 PC 通信 说明:单片机可接收 PC 发送的数字字符,按下单片机的 K1 键后,单片机可向 PC 发送 字符串。在 Proteus 环境下完成本实验时,需要安装 Virtual Serial Port Driver 和串口调试助手。本例缓冲 100 个数字字符, 缓冲满后新数字从前面开始存放(环形缓冲)。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar Receive_Buffer[101]; uchar Buf_Index=0; //数码管编码 //接收缓冲 //缓冲空间索引 uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<120;i ); } //主程序 void main() { uchar i; P0=0x00; Receive_Buffer[0]=-1; SCON=0x50; //串口模式 1,允许接收 TMOD=0x20; TH1=0xfd; TL1=0xfd; //T1 工作模式 2 //波特率 9600 PCON=0x00; //波特率不倍增 EA=1;EX0=1;IT0=1; ES=1;IP=0x01; TR1=1; while(1) { for(i=0;i<100;i ) { //收到-1 为一次显示结束 if(Receive_Buffer[i]==-1) break; P0=DSY_CODE[Receive_Buffer[i]]; DelayMS(200); } DelayMS(200); } } //串口接收中断函数 void Serial_INT() interrupt 4 { uchar c; if(RI==0) return; ES=0; //关闭串口中断 RI=0; //清接收中断标志 c=SBUF; if(c>='0'&&c<='9') { //缓存新接收的每个字符,并在其后放-1 为结束标志 Receive_Buffer[Buf_Index]=c-'0'; Receive_Buffer[Buf_Index 1]=-1; Buf_Index=(Buf_Index 1)0; } ES=1; } void EX_INT0() interrupt 0 //外部中断 0 { uchar *s="这是由 8051 发送的字符串!\r\n"; uchar i=0; while(s[i]!='\0') { SBUF=s[i]; while(TI==0); TI=0; i ; } }

第 02 篇 硬件应用

19 用 ADC0808 控制 PWM 输出

/* 名称:用 ADC0808 控制 PWM 输出

说明:使用数模转换芯片 ADC0808,通过调节可变电阻 RV1 来调节脉冲宽度,运行程序时,通过虚拟示波器观察占空比的变化。

*/

单片机编程100例,单片机编程入门自学100例(20)

栏目热文

51单片机教程郭天祥(郭天祥51单片机教程电子书)

51单片机教程郭天祥(郭天祥51单片机教程电子书)

虽然现在网上的硬件教学资源越来越多了,但是经典教程的地位仍然难以被撼动,郭天祥老师的经典教程《十天学会51单片机》不知成...

2023-10-25 06:08:21查看全文 >>

微信被盗被改了手机号码怎么办(如果微信被盗手机号被改了怎么办)

微信被盗被改了手机号码怎么办(如果微信被盗手机号被改了怎么办)

7月13日李奶奶一脸焦急地来到兴国县公安局均村派出所报案称自己的微信账号被盗微信绑定的手机号被更改微信钱包里有余额1万多...

2023-10-25 05:55:39查看全文 >>

新开号码无法注册微信(电信号码无法注册微信)

新开号码无法注册微信(电信号码无法注册微信)

本文内容来自于网络,若与实际情况不相符或存在侵权行为,请联系删除。本文仅在今日头条首发,搬运必究!微信,这款曾经仅面向手...

2023-10-25 06:26:18查看全文 >>

新号码已经注册了微信怎么办

新号码已经注册了微信怎么办

现在网上的花里胡哨的手机卡一大堆,办过的小伙伴们也是后续问题不断,昨天就有一个小伙伴私信葫芦弟,他说他新办理的手机卡注...

2023-10-25 06:09:44查看全文 >>

微信被盗手机号码被换了怎么办(微信号被盗且手机号码换了怎么办)

微信被盗手机号码被换了怎么办(微信号被盗且手机号码换了怎么办)

7月13日李奶奶一脸焦急地来到兴国县公安局均村派出所报案称自己的微信账号被盗微信绑定的手机号被更改微信钱包里有余额1万多...

2023-10-25 06:40:42查看全文 >>

51单片机入门教程免费(51单片机仿真软件有哪些)

51单片机入门教程免费(51单片机仿真软件有哪些)

本套教程共3节课程,熟悉这3节课程的话,你已经入门51单片机了。下面是内容正文单片机学习的第一步,什么是单片机最小系统?...

2023-10-25 05:53:15查看全文 >>

51单片机编程对照表(51单片机图形化编程)

51单片机编程对照表(51单片机图形化编程)

学习单片机// 实例 1:用单片机控制第一个灯亮#include<reg51.h> //包含 51单片机寄存...

2023-10-25 06:25:32查看全文 >>

郭天祥10天学会单片机(初学编程100个代码自学)

郭天祥10天学会单片机(初学编程100个代码自学)

虽然现在网上的硬件教学资源越来越多了,但是经典教程的地位仍然难以被撼动,郭天祥老师的经典教程《十天学会51单片机》不知成...

2023-10-25 06:37:16查看全文 >>

普中科技51单片机教程(普中科技51单片机咋用)

普中科技51单片机教程(普中科技51单片机咋用)

一、连接步骤1. 硬件连接插上普中PZ-51硬件仿真器,电脑的设备管理器出现该设备。如果没有出现,要留意USB线是否是有...

2023-10-25 06:07:20查看全文 >>

学习51单片机的教程(51单片机学习推荐)

学习51单片机的教程(51单片机学习推荐)

刚开始学习51单片机的时候,我是看郭天祥老师和开发板,现在我依然觉得非常适合零基础入门。大家的起点都一样,不懂电路,不懂...

2023-10-25 06:07:59查看全文 >>

文档排行