PC端为Python所写,运行时需要增加2个虚拟串口。
PC(Python)运行界面
PC(Python)运行界面
仿真电路图
仿真电路图
- import serial #导入serial
- import tkinter as tk #导入tkinter
- ser = serial.Serial("COM2", 9600,timeout = 0)
- def btn1Clicked():
- ser.write('1'.encode())
- labelHello.config(text = "LED ON")
- def btn2Clicked():
- ser.write('2'.encode())
- labelHello.config(text = "LED OFF")
- def winsafter():
- Ent1.delete(0,"end")
- Ent1.insert(0,ser.read(1))
- top.after(1000,winsafter)
- # 建立tkinter窗口,设置窗口标题
- top = tk.Tk()
- top.title("Device Control(BPS:9600)")
- top.geometry("380x180")
- # 在窗口中创建标签及设置位置
- labelHello = tk.Label(top, text = "Press the button……")
- labelHello.place(x=130, y=40)
- # 在窗口中创建按钮
- btn1 = tk.Button(top, text = "打开", command = btn1Clicked)
- btn2 = tk.Button(top, text = "关闭", command = btn2Clicked)
- # 设置按钮位置
- btn1.place(x=130, y=80)
- btn2.place(x=210, y=80)
- tk.Label(top, text = "报警状态:").place(x=130, y=130)
- Ent1 = tk.Entry(top,width=7)
- Ent1.place(x=190, y=130)
- top.after(1000,winsafter)
- # 运行并显示窗口
- top.mainloop()
复制代码
- #include "reg52.h"
- sbit LED=P2^0;
- sbit key1=P1^0;
- sbit key2=P1^3;
- unsigned char senddata;
- unsigned char putdata[]={0x31,0x32,0x33,0x34,'\0'};
- void delay(unsigned int z)
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=1000;y>0;y--);
- }
- //串口初始化,波特率9600BPS(晶振为11.0592M)
- void InitializeSystem()
- {
- SCON = 0X50;//串口方式1,允许接收
- TMOD = 0X20;//定时器1定时方式2
- TCON = 0x40;//设定时器1开始计数
- TH1 = TL1 = 250;
- PCON = 0x80; //波特率加倍控制,SMOD位
- RI = 0; //清收发标志
- TI = 0;
- TR1 = 1; //启动定时器
- EA=1; //开启总中断
- ES = 1;
- ET1=0;
- }
- //字符发送函数
- void putchar(unsigned char data1)
- {
- SBUF = data1; //将待发送的字符送入发送缓冲器
- while(TI == 0); //等待发送完成
- TI = 0; //发送中断标志请0
- }
- //字符串发送函数
- void putstring(unsigned char *dat)
- {
- while(*dat != '\0') //判断字符串是否发送完毕
- {
- putchar(*dat); //发送单个字符
- dat++; //字符地址加1,指向先下一个字符
- delay(5);
- }
- }
- //主函数
- void main( )
- {
- InitializeSystem( );
- while(1)
- {
- if(senddata=='1')
- {
- LED=0;
- }
- if(senddata=='2')
- {
- LED=1;
- }
-
- if(key1==0)
- {
- while(key1==0){}
- putchar(0x31);
- }
- if(key2==0)
- {
- while(key2==0){}
- putstring(putdata);
- }
-
- }
- }
-
- //接收中断函数
- void revdata(void) interrupt 4
- {
- if(RI == 0) return; //如果没有接收中断标志,返回
- ES = 0; //关闭串口中断
- RI = 0; //清串行中断标志位
- senddata=SBUF;
- ES = 1; //开启串口中断
- }
复制代码
工程包
工程包
以上资料51hei附件下载:
PC(Python) 51单片机(C51).rar
(55.85 KB, 下载次数: 28)
|