如何用python点亮一盏灯
引子
听说过很多点亮一盏灯的故事。你问一个程序员,愿意为我点亮一盏灯吗?回答或许是:可以,如果让我选择点亮的时间,我愿意是一万年;如果让我选择点亮的方式,我原意选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点亮一盏灯相关推荐
- 企业者的福音之8266接入阿里智能,点亮一盏灯
代码地址如下: http://www.demodashi.com/demo/12178.html 一.前言. 最近的天猫精灵火热朝天,双十一仅仅99块就抱回家!这门博文,涉及到绝大部分的接入阿里智能的 ...
- STM32-点亮一盏灯
STM32-点亮一盏灯 概述 硬件 配置GPIO 调试结果演示 概述 前几天入手了一块STM32F103 Nucleo-64开发板,今天就来尝试一下设置GPIO来点亮一盏LED. 硬件 硬件方面我使用 ...
- STM32点亮第一盏灯
STM32点亮第一盏灯 1.在原理图里面找到灯的位置 2.编程实现 3.编译.连接.下载运行即可 1.在原理图里面找到灯的位置 打开原理图,如下图可以观察到LED1对应的管脚是PA5 并且,阳极对应的 ...
- 51单片机——点亮第一盏灯详细操作过程
在Keil5 中new 一个project保存到合适的位置 在project中new一个文件将他保存为LED.C 选中AT89C51芯片 钩中生成16进制文件,可直接烧录到板子上 #include & ...
- esp32之点亮一盏灯
我还记得当初学51单片机导师与我们说,当你点亮一盏灯,那么你已经学会了80%,就当个笑话吧,但也不是并无道理 源码路径esp-idf/examples/get-started/blink #inclu ...
- arduino灯光装置_Arduino教程中级 项目一 点亮一盏灯
项目一 点亮一盏灯 在前面几篇前奏中,我们已经对Arduino有了简单的了解,整个装置工作是依赖于哪些部分.也了解了电子世界最重要两个量,数字量与模拟量.接下来我们就正式开始做东西了,第一个要做的必须 ...
- 点亮第一盏灯的c语言编程,单片机点亮第一盏灯实验详细教程
第一个实验:keil软件使用与点亮人生的第一只发光二极管 1.001.jpg (23.15 KB, 下载次数: 78) 2017-5-20 17:27 上传 本章详细介绍单片机程序常用编译软件 Kei ...
- 点亮一盏灯,温暖一个梦
我努力闭上双眼,眼前漆黑一片,但,有一个梦不会变. 睁开眼,点上一盏灯,将那个梦温暖. --题记 黑夜来得无声:爱情却来得会色又会声:孤寂,却爬上心坎,无痕.我不想回忆什么,只想轻轻关上心门,让忧伤沦 ...
- 单片机用c语言开关点亮一盏灯,用PLC设计用一个开关控制8个灯,每5S逐个点亮,并循环...
我用S7-300的PLC中的STL语言编写的程序,你可以将它转化为LAD语言看的: 网络1 A I 0.3 //用于流水灯的复位与停止循环点亮. JNB _00 ...
最新文章
- android 状态栏和标题栏,Android隐藏状态栏和标题栏,相当于全屏效果
- Faster-RCNN
- 电脑其他设备android打问号,电脑设备管理器里的其它设备打问号,怎么解决啊?
- 一些 Google 搜索词
- 【转】在windows上安装VTK
- selenium-04-验证码问题
- %3c dd%3e html,index.html
- java线程安全(一)
- php生成html文件方法总结
- 云运维管家服务器,云平台随身管理-我的“运维管家”
- VC6.0 操作Excel表格
- python修改图片,Python之修改图片像素值的方法
- RSA中的中国剩余定理(CRT)和多素数(multi-prime)
- 多项式相加减【数据结构实验报告】
- 【翻译】利用加速度求解位置的算法——三轴传感器
- ibm oracle 应用程序 编排_甲骨文携手IBM认证Oracle Fusion应用软件
- 我的DB2数据库之旅
- idea子模块使用父模块变量properties in parent definition are prohibited
- php p12,php – 在OSX上读取p12证书时写入权限错误(OSStatus -61)
- Photoshop CC 2017 For Mac安装教程
热门文章
- MapReduce编程入门-日志访问次数统计任务
- 教你轻松一键安装win10系统
- 如何生成餐桌专属二维码
- 锁定文件失败 打不开磁盘“D:\Documents\Virtual Machines\Red Hat Enterprise Linux 6 64 位\Red Hat Enterprise Linux
- 适合BS模式项目的录入页面
- error: expected initializer before ‘’ token
- HLOJ 2018 某校几人
- 护眼台灯的色温多少合适?护眼灯能保护眼睛吗
- 计算机图形学算法【1】——直线画法(数值微分法)
- 千兆/万兆单向传输网卡