/**********************单片机与PC机通讯例程************************

*           STC89C52RC+

*                  编写:颜

*                 晶振:11.0592MHZ

******************************************************************/

#include

#define jingzhen     11059200UL                         /*使用22.1184M晶体*/

#define botelv   9600UL                     /*波特率定义为9600*/

volatile unsigned char sending;

#define uchar unsigned char

#define uint  unsigned int

#define ulong unsigned long

uchar code LED_L[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};

uchar code LED_R[] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};

uchar code LED_1[] = {0xe7, 0xe7, 0xdb, 0xdb, 0xbd, 0xbd, 0x7e, 0x7e};

uchar code LED_2[] = {0x7e, 0x7e, 0xbd, 0xbd, 0xdb, 0xdb, 0xe7, 0xe7};

#define   u16   unsigned int

#define   u8    unsigned char

//流水灯

u16 LED_Delay = 0;

u8 KeyFlag = 0;

u8 LEDState = 0;

u8 Data = 0;

u8 Flag = 0;

void delay(unsigned char i)

{

unsigned char j,k;

for(j=i;j>0;j--)

for(k=90;k>0;k--);

}

void init(void)                                //串口初始化

{

EA=0; //暂时关闭中断

TMOD&=0x01;  //定时器0工作在16位模式

TMOD|=0x20;    //定时器1工作在模式2,自动重装模式

SCON=0x50;     //串口工作在模式1

TH1=256-jingzhen/(botelv*12*16);  //计算定时器重装值

TL1=256-jingzhen/(botelv*12*16);

PCON|=0x80;    //串口波特率加倍

ES=1;         //串行中断允许

TR1=1;        //启动定时器1

REN=1;        //允许接收

//定时器0

TH0 = (65535 - 5000) >> 8;                                                                                                                   //写入定时器0初值

TL0 = (65535 - 5000);

ET0 = 1;                                                                                                                                                      //打开定时器0中断

TR0 = 1;                                                                                                                                                           //启动定时器0

EA=1;         //允许中断

}

void main()

{

init();

while(1)

{

if(Flag != 0)

{

Flag = 0;

KeyFlag = 0;

switch(Data)                         //补充用户所需代码

{

case 0x00:P0 = 0xfe;break;          //第一个按键

case 0x01:P0 = 0xfd;break;

case 0x02:P0 = 0xfb;break;

case 0x03:P0 = 0xf7;break;

case 0x04:P0 = 0xef;break;

case 0x05:P0 = 0xdf;break;

case 0x06:P0 = 0xbf;break;

case 0x07:P0 = 0x7f;break;

case 0x08:KeyFlag = 1;LEDState = 0;break;

case 0x09:KeyFlag = 2;LEDState = 0;break;

case 0x0A:KeyFlag = 3;break;

case 0x0B:KeyFlag = 4;break;

case 0x0C:break;

case 0x0D:break;

case 0x0E:break;

case 0x0F:break;

}

}

if(KeyFlag != 0)

{

switch(LEDState)

{

case 0:

case 2:

case 4:

case 6:

case 8:

case 10:

case 12:

case 14:

LED_Delay = 0;

switch(KeyFlag)

{

case 1:P0 = LED_L[LEDState/2];break; //流水灯左模式

case 2:P0 = LED_R[LEDState/2];break; //流水灯右模式

case 3:P0 = LED_1[LEDState/2];break;

case 4:P0 = LED_2[LEDState/2];break;

}

LEDState++;

break;

default:

if(LED_Delay >= 50)

{

LED_Delay = 0;

LEDState++;

if(LEDState == 16)

{

LEDState = 0;

}

}

break;

}

}

}

}

void uart(void) interrupt 4                 //串口发送中断

{

if(RI)    //收到数据

{

RI=0;   //清中断请求

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

计算机软件可以控制单片机,一个电脑控制单片机通讯程序分享相关推荐

  1. java一个电脑控制4个屏幕_Synergy让一个鼠标一个键盘操作多台电脑

    我有一台台式机和一台笔记本,经常要同时使用两台电脑.一般的做法就是将两个鼠标放到同一个鼠标垫上,使用不同的电脑就把手切换到不同的鼠标.今天突然觉得这很麻烦,就想有没有什么方法让一个鼠标(当然还有键盘) ...

  2. 通过按键控制二极管c语言,单片机一个按键控制一个发光二极管

    满意答案 vs2026 2013.08.31 采纳率:58%    等级:12 已帮助:13269人 以下是用C语言实现的: #include sbit KEY=P1^0; sbit LED=P1^1 ...

  3. #单片机#一个小型的单片机控制系统——智能窗帘控制系统

    介绍 涉及模块: 1.LCD1602液晶屏 2.DS18B20温度传感器 3.ADC0832数模转换芯片 4.TORCH_LDR光照度控件 5.步进电机 实现功能: 1.在LCD上显示实时温度与窗帘状 ...

  4. 单片机GPIO软件模拟I2C通讯程序

    文章原始地址:http://feotech.com/?p=98 本程序主要用于使用可编程芯片自身的IO管脚,模拟I2C通信的协议,实现I2C总线数据的传输. /******************** ...

  5. 学计算机必须先学单片机吗,先有单片机还是先有电脑?

    我们认识了单片机,电脑也很熟悉,在学习单片机时,我们知道,单片机中包括了: CPU,RAM,ROM这些东西. 电脑中好像也是这么几件,那单片机可以像电脑一样吗? 显然是不行的,我们可以这么理解单片机和 ...

  6. 如何使用计算机控制赤道仪,电脑控制赤道仪教程.pdf

    电脑控制赤道仪教程 电脑控制赤道仪教程 适用于信达,艾顿,星特朗赤道仪 2015年3月 整体架构图 天文控制软件 RS232(串口) / USB 赤道仪驱动 各类常用赤道仪 基础软件 基础软件安装 应 ...

  7. 一台服务器最多多少个线程,一个电脑最多能开启多少个线程?

    -- 一个进程可以开启的线程受可用内存限制,如果是32位的机器,那么默认一个进程有2G的可用内存,而每个线程默认分析1M的栈空间,所以这种情况下理论最线程数在2000多个.一个解决办法是创建线程时减少 ...

  8. 串口通信-电脑控制单片机点亮LED

    前言 此篇只对各函数功能做通俗易懂的解释,适合初学者理解串口通信的功能. 一.串口通信 1.什么是串口通信 我们使用的usb转串口是经典的串口通信之一,实现了电脑与单片机之间的联系,将程序通过串口从电 ...

  9. 第01课 了解单片机的原理控制一个LED灯的亮和灭-----51单片机C语言试验教程

    第一课,了解单片机及单片机的控制原理和DX516 的用法,控制一个LED 灯的亮和灭 本章学习内容: 单片机基本原理,如何使用DX516 仿真器,如何编程点亮和灭掉一个LED 灯,如何进入KEILC5 ...

  10. 单片机一个IO口如何控制两个发光二极管LED

    单片机工程师在面试的过程中,经常会碰到一些相同的问题,笔者总结了十个提问率较高的问题,供大家参考.现在我们来分析单片机工程师常遇面试问题之一:一个单片机IO口如何控制两颗LED? 将两颗LED命名为D ...

最新文章

  1. gradle工程环境搭建---从SVN上导出项目源码
  2. Flashback Query笔记
  3. 深度学习:pytorch学习
  4. vue手势滚动_vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
  5. Windows 电脑命令一览
  6. java常见的定时任务
  7. FZU 2092 收集水晶 BFS记忆化搜索
  8. 关于心理的二十五种倾向(查理·芒格)-1
  9. oracle的sql硬解析和软解析,[ORACLE]oracle SQL执行过程 软解析(soft prase)硬解析(hard prase)以及 Soft Soft Parse...
  10. 北新建材被授予“亚洲最大石膏板产业集团”硅钙板吊顶
  11. 2020春招阿里一面
  12. 小文智能意图训练详解
  13. 计算机应用计论文,计算机应用专业毕业计(论文)格式要求.doc
  14. 看国家宝藏,顺便学习一下国密算法
  15. 计算机英语ppt演讲稿,英语ppt演讲稿
  16. 巨杉数据库5.0携手南天信息布局云业务
  17. 数制转换技巧(十进制 to 二进制)
  18. 拯救选择困难症2.0
  19. [sql server] win7 home basic 安装sql server 2005开发版与配置
  20. 第五十一讲 platform

热门文章

  1. oracle 建立临时表语句,oracle创建临时表
  2. CleanMyPC中文版切换教程(专注于电脑缓存文件清理的工具)
  3. C#关于该进程无法访问文件,因为该文件正由另一进程使用的错误的一点心得(示例)
  4. GMP认证计算机化系统验证
  5. 关于软件开发的那些事(三):聊聊软件项目管理及成本核算
  6. 命令创建vue项目工程
  7. Hello Qt(十三)——QT信号与槽机制
  8. 推荐几款Vue后台管理系统的框架,以便备用
  9. 简约个人竞聘简历PPT模板
  10. (Demo3D 学习笔记)案例1:自创组件,可以一键自动连接场景中的其他相关组件