当前位置:首页 > 经验 >

单片机实战100例详解合集(单片机编程实例全集)

来源:原点资讯(m.360kss.com)时间:2023-10-25 06:37:40作者:YD166手机阅读>>

}

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

单片机实战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例详解合集,单片机编程实例全集(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例详解合集,单片机编程实例全集(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例详解合集,单片机编程实例全集(20)

栏目热文

51单片机指令详解(51单片机基础代码详解)

51单片机指令详解(51单片机基础代码详解)

为了加深初学者对51单片机指令的理解,现在把指令执行的过程在此详细说明,希望对你有启发!单片机执行程序的过程,实际上就是...

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

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

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

单片机入门51单片机是最好的选择。很多人可能以为51单片机已经过时了,能这么想的绝对是没实际产品开发经验的。51最大的优...

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

51单片机文字教程(51单片机怎么弄中文版)

51单片机文字教程(51单片机怎么弄中文版)

点阵显示实验一、什么是点阵?我们用之前的方法一个IO口只能控制一个led,如果需要用更少的IO口控制更多的led怎么办呢...

2023-10-25 05:54:11查看全文 >>

51单片机教程零基础入门(零基础51单片机自学教程)

51单片机教程零基础入门(零基础51单片机自学教程)

大学四年白混了四年,如今要毕业了。学习单片机。也算是工作前的准备。单片机对于工科类的学生来说真的很重要,这点到现在才明...

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

51单片机入门自学(51编程入门教程)

51单片机入门自学(51编程入门教程)

曾经我是自学单片机然后跨行成功,今天来分享下自己的经验。在网上看了很多文章,很多人说现在51单片机已经过时了,建议从ST...

2023-10-25 06:15:13查看全文 >>

51单片机制作教程入门(51单片机入门最好教程)

51单片机制作教程入门(51单片机入门最好教程)

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

2023-10-25 06:04:12查看全文 >>

自学单片机的亲身经历(零基础从哪里开始学单片机)

自学单片机的亲身经历(零基础从哪里开始学单片机)

大家好,我是无际单片机编程徐工。最近有部分学员陆陆续续开始找工作了,在此分享下我第一份工作的经历。更详细的面试经验和技巧...

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

51单片机从零开始学(51编程入门自学100例)

51单片机从零开始学(51编程入门自学100例)

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

2023-10-25 06:30:01查看全文 >>

51单片机入门(51单片机入门书本推荐)

51单片机入门(51单片机入门书本推荐)

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

2023-10-25 06:17:29查看全文 >>

手把手学习51单片机(新人如何学习51单片机)

手把手学习51单片机(新人如何学习51单片机)

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

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

文档排行