单片机C语言程序设计实训100例—基于8051+Proteus仿真(10)

2019-08-17 12:33

if(P2==0x00) P2=0xe0; //开3个旋转灯 else P2=0x00; //关闭所有LED

}

//定时器0中断 void T0_INT() interrupt 1 {

TH0=0xfe; TL0=FRQ;

SPK=~SPK; }

//定时器1中断 void T1_INT() interrupt 3 {

TH1=-45000/256; TL1=-45000%6;

P2=_crol_(P2,1); }

//主程序 void main() { }

43 串行数据转换为并行数据

/* 名称:串行数据转换为并行数据

说明:串行数据由RXD发送给串

并转换芯片74164,TXD则用于输出移位时钟脉冲,74164将串行输入的1字节转换为并行数据,并将转换的数据通过8只LED显示出来。本例串口工作模式0,即移位寄存器I/O模式。

46

P2=0x00; SPK=0x00; TMOD=0x11; TH0=0x00; TL0=0xff; IT0=1; IE=0x8b; IP=0x01; TR0=0; TR1=0; while(1) { }

FRQ++; DelayMS(1);

//T0、T1方式1

//开启0,1,3号中断 //INT0设为最高优先

//定时器启停由INT0控制,初始关闭

*/

#include #include

#define uchar unsigned char #define uint unsigned int sbit SPK=P3^7; uchar FRQ=0x00; //延时

void DelayMS(uint ms) {

uchar i; while(ms--) for(i=0;i<120;i++); }

//主程序 void main() { }

44 并行数据转换为串行数据

/* 名称:并行数据转换为串行数据 说明:切换连接到并串转换芯片74LS165的拨码开关,该芯片将并行数据以串行方式发送到8051的RXD引脚,移位脉冲由TXD提供,显示在P0口。 */

#include #include #include

#define uchar unsigned char #define uint unsigned int sbit SPL=P2^5; //延时

//shift/load

uchar c=0x80; SCON=0x00; TI=1; while(1) { }

c=_crol_(c,1); SBUF=c;

while(TI==0); TI=0;

DelayMS(400);

//等待发送结束

//TI软件置位

//串口模式0,即移位寄存器输入/输出方式

void DelayMS(uint ms)

47

{

uchar i;

while(ms--) for(i=0;i<120;i++); }

//主程序

void main() { SCON=0x10; }

while(1) { }

SPL=0; SPL=1;

//置数(load),读入并行输入口的8位数据

//移位(shift),并口输入被封锁,串行转换开始

//RI软件置位

//接收到的数据显示在P0口,显示拨码开关的值

//串口模式0,允许串口接收

while(RI==0); //未接收1字节时等待 RI=0; P0=SBUF; DelayMS(20);

45 甲机通过串口控制乙机LED

/* 名称:甲机发送控制命令字符 说明:甲单片机负责向外发送控制命令字符“A”、“B”、“C”,或者停止发送,乙机根据所接收到的字符完成LED1闪烁、LED2闪烁、双闪烁、或停止闪烁。 */

#include #define uchar unsigned char #define uint unsigned int sbit LED1=P0^0; sbit LED2=P0^3; sbit K1=P1^0; //延时

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);

48

TI=0; }

//主程序 void main() { uchar Operation_No=0; SCON=0x40; //串口模式1 TMOD=0x20; //T1工作模式2 PCON=0x00; //波特率不倍增

TH1=0xfd; TL1=0xfd; TI=0; TR1=1; while(1) { 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: 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;

}

DelayMS(100); } }

/* 名称:乙机程序接收甲机发送字符并完成相应动作 说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。*/

#include #define uchar unsigned char #define uint unsigned int sbit LED1=P0^0;

49

sbit LED2=P0^3; //延时

void DelayMS(uint ms) {

uchar i; while(ms--) for(i=0;i<120;i++); }

//主程序 void main() { }

SCON=0x50; TMOD=0x20; PCON=0x00; TH1=0xfd; TL1=0xfd; RI=0; TR1=1; LED1=LED2=1; while(1) { }

if(RI) {

RI=0;

switch(SBUF) //根据所收到的不同命令字符完成不同动作 { }

//关闭LED

case 'A': LED1=~LED1;LED2=1;break; case 'B': LED2=~LED2;LED1=1;break; case 'C': LED1=~LED1;LED2=LED1;

//LED1闪烁 //LED2闪烁 //双闪烁

//如收到则LED闪烁

//串口模式1,允许接收

//T1工作模式2 //波特率不倍增 //波特率9600

}

else LED1=LED2=1; DelayMS(100);

46 单片机之间双向通信

/* 名称:甲机串口程序

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

#include

#define uchar unsigned char #define uint unsigned int

50


单片机C语言程序设计实训100例—基于8051+Proteus仿真(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国学生发展核心素养

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: