引子

听说过很多点亮一盏灯的故事。你问一个程序员,愿意为我点亮一盏灯吗?回答或许是:可以,如果让我选择点亮的时间,我愿意是一万年;如果让我选择点亮的方式,我原意选python语言。
说完,他打开电脑,启动命令行窗口:输入一行文字:python led.py -s o
神奇的是,灯真的亮了!!!

原来如此

在电脑上输入一句话就可以点亮一盏灯吗?是的,不过仅仅有python语言还不够,还得有一盏灯,一个单片机,一个带串口转换功能的usb线,就跟下面的图片有点像:

工作原理如下:
python语言收到打开led灯的请求,向串口发送数据,usb转换线模拟了串口功能,发送数据到达单片机的串口模块。单片机上的中断处理程序接到请求,读到请求数据后拉低LED负极的电平,电流通过发LED,灯被电亮。
这是一个听起来很简单的过程,但也是一个软硬件协同工作的例子。

python代码如下

# -*- coding:utf-8 -*-
# 向串口发送数据,控制led灯的点亮import serial
import time,sys
import getopt#设置端口和波特率
selComPort ='com5'
print("connect...", selComPort)#波特率
selBaudRate =9600
ser = serial.Serial()
ser.port =selComPort
ser.baudrate =selBaudRate
ser.timeout =3#打开串口,如果不设置超时值,则在读不到串口数据时会阻塞。
#通信过程中往往是第一次读串口数据时取不到数据
#ser = serial.Serial("COM3", timeout=3)
ser.open()#解析命令行参数 python led.py -s o 点亮,python led.py -s c 熄灭
try:opts, args = getopt.getopt(sys.argv[1:],'s:',['status='])
except getopt.GetoptError:print('error:','options invalid')sys.exit()status = 'c'
for k, v in opts:if k in ("-s", "--status"):status = vi = 0
while  True: i+=1#实践发现第一次发送的数据,stc51单片机还未发现没有收到的情形,#在用arduino时,基本上第一次发送的数据都没有收到#为确保无误,还是以收到单片机的返回消息后才结束尝试 ser.write(status) #ser.write("off")       received = ser.readline()print('loop index:',i,'received:',received)   if received:break

单片机代码如下

/************************************************************
*实验名  :串口通讯
*实验效果:配合串口助手使用 将pc机发出的数据传送到单片机中
*         单片机将接收到的数据发送到pc机 可以在串口助手上显示
*波特率:  9600
************************************************************/
#include<reg52.h>
sbit led1  = P1^0;
void UsartConfiguration()
{SCON=0X50;            //设置为工作方式1TMOD=0X20;           //设置计数器工作方式2PCON=0X00;     //SMOD=0,32分频TH1=0Xfd;     //计数器初始值设置,注意波特率是9600的TL1=0Xfd;ES=1;                   //打开接收中断EA=1;                      //打开总中断TR1=1;                  //打开计数器
}void main()
{UsartConfiguration();while(1);
}void uart() interrupt 4
{unsigned char rec;rec = SBUF;//取出接收到的数据if(rec == 'o'){led1 = 0;}if(rec == 'c'){led1 = 1;}RI = 0;//清除接收中断标志位    SBUF = rec;//将接收到的数据放回发送缓存器while(!TI);//等待发送数据完成TI = 0;//清除发送中断标志位
}

还需要什么

还需要一个keil_C51的编程软件,它负责将c语言的代码编译成可单片机上运行的二进制文件,如图所示

还需要一个将编译好的程序下载到单片机的软件:stc-isp-15xx-v6.85.exe,它负责将二进制文件下载(烧写)到单片机上
工作界面如下图所示:

还需要,还需要不能将线接错了

接线提示

此文所说的usb转串口用的是PL2303芯片,
参见《PL2303资料/PL2033下载线说明书》可知引脚定义:
红色 5V
黑色 GND
白色 RXD
绿色 TXD

再查:stc51的定义,得知
p3.0 ->RXD
P3.1 ->TXT,

根据串口数据线交叉连接的原则,得到

usb转串口板与单片机的连接关系如下:
红色 5V -> vcc5.0
黑色 GND ->GND
白色 RXD ->p3.1
绿色 TXD->p3.0

大结局

python程序员一顿操作,三个小时侯后,灯终于亮了,等得不耐烦的那位早走了。窗外,星星点灯!

如何用python点亮一盏灯相关推荐

  1. 企业者的福音之8266接入阿里智能,点亮一盏灯

    代码地址如下: http://www.demodashi.com/demo/12178.html 一.前言. 最近的天猫精灵火热朝天,双十一仅仅99块就抱回家!这门博文,涉及到绝大部分的接入阿里智能的 ...

  2. STM32-点亮一盏灯

    STM32-点亮一盏灯 概述 硬件 配置GPIO 调试结果演示 概述 前几天入手了一块STM32F103 Nucleo-64开发板,今天就来尝试一下设置GPIO来点亮一盏LED. 硬件 硬件方面我使用 ...

  3. STM32点亮第一盏灯

    STM32点亮第一盏灯 1.在原理图里面找到灯的位置 2.编程实现 3.编译.连接.下载运行即可 1.在原理图里面找到灯的位置 打开原理图,如下图可以观察到LED1对应的管脚是PA5 并且,阳极对应的 ...

  4. 51单片机——点亮第一盏灯详细操作过程

    在Keil5 中new 一个project保存到合适的位置 在project中new一个文件将他保存为LED.C 选中AT89C51芯片 钩中生成16进制文件,可直接烧录到板子上 #include & ...

  5. esp32之点亮一盏灯

    我还记得当初学51单片机导师与我们说,当你点亮一盏灯,那么你已经学会了80%,就当个笑话吧,但也不是并无道理 源码路径esp-idf/examples/get-started/blink #inclu ...

  6. arduino灯光装置_Arduino教程中级 项目一 点亮一盏灯

    项目一 点亮一盏灯 在前面几篇前奏中,我们已经对Arduino有了简单的了解,整个装置工作是依赖于哪些部分.也了解了电子世界最重要两个量,数字量与模拟量.接下来我们就正式开始做东西了,第一个要做的必须 ...

  7. 点亮第一盏灯的c语言编程,单片机点亮第一盏灯实验详细教程

    第一个实验:keil软件使用与点亮人生的第一只发光二极管 1.001.jpg (23.15 KB, 下载次数: 78) 2017-5-20 17:27 上传 本章详细介绍单片机程序常用编译软件 Kei ...

  8. 点亮一盏灯,温暖一个梦

    我努力闭上双眼,眼前漆黑一片,但,有一个梦不会变. 睁开眼,点上一盏灯,将那个梦温暖. --题记 黑夜来得无声:爱情却来得会色又会声:孤寂,却爬上心坎,无痕.我不想回忆什么,只想轻轻关上心门,让忧伤沦 ...

  9. 单片机用c语言开关点亮一盏灯,用PLC设计用一个开关控制8个灯,每5S逐个点亮,并循环...

    我用S7-300的PLC中的STL语言编写的程序,你可以将它转化为LAD语言看的: 网络1 A     I      0.3          //用于流水灯的复位与停止循环点亮. JNB   _00 ...

最新文章

  1. android 状态栏和标题栏,Android隐藏状态栏和标题栏,相当于全屏效果
  2. Faster-RCNN
  3. 电脑其他设备android打问号,电脑设备管理器里的其它设备打问号,怎么解决啊?
  4. 一些 Google 搜索词
  5. 【转】在windows上安装VTK
  6. selenium-04-验证码问题
  7. %3c dd%3e html,index.html
  8. java线程安全(一)
  9. php生成html文件方法总结
  10. 云运维管家服务器,云平台随身管理-我的“运维管家”
  11. VC6.0 操作Excel表格
  12. python修改图片,Python之修改图片像素值的方法
  13. RSA中的中国剩余定理(CRT)和多素数(multi-prime)
  14. 多项式相加减【数据结构实验报告】
  15. 【翻译】利用加速度求解位置的算法——三轴传感器
  16. ibm oracle 应用程序 编排_甲骨文携手IBM认证Oracle Fusion应用软件
  17. 我的DB2数据库之旅
  18. idea子模块使用父模块变量properties in parent definition are prohibited
  19. php p12,php – 在OSX上读取p12证书时写入权限错误(OSStatus -61)
  20. Photoshop CC 2017 For Mac安装教程

热门文章

  1. MapReduce编程入门-日志访问次数统计任务
  2. 教你轻松一键安装win10系统
  3. 如何生成餐桌专属二维码
  4. 锁定文件失败 打不开磁盘“D:\Documents\Virtual Machines\Red Hat Enterprise Linux 6 64 位\Red Hat Enterprise Linux
  5. 适合BS模式项目的录入页面
  6. error: expected initializer before ‘’ token
  7. HLOJ 2018 某校几人
  8. 护眼台灯的色温多少合适?护眼灯能保护眼睛吗
  9. 计算机图形学算法【1】——直线画法(数值微分法)
  10. 千兆/万兆单向传输网卡