zdly.net
当前位置:首页 >> 51单片机串口控制lED >>

51单片机串口控制lED

unsigned char tmp; sbit led=P1^0; void main(void) { TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率 TH1 = 0xFD; // 波特率9600 TL1 = 0xFD; SCON = 0x50; // 设定串行口工作方式 PCON &= 0xef; // 波特率不倍增 TR1 = 1

十六进制0xfe,对应二进制 1111_1110 这个二进制,对应引脚为 p1.7 p1.6 p1.5 p1.4 p1.3 p1.2 p1.1 p1.0 p1 = 0xfe,则对应p1.0为0,其他引脚输出1.你的led,必然是共阳极.所以p1.0对应的灯亮.(如果是共阴极,那么p1.7~p1.1共7个led亮,p1.0上的led不亮)

#include<stc89.h>#define uchar unsigned char#define uint unsigned int sbit led1 = P1 ^ 1; //定义两个LED灯 sbit led2 = P1 ^ 2; // 这里需要你自己定义你的I/O口 uchar a;//void delay(uint z); void init(); void main() { init(); while(1) { if (a == 0x31) { led

编了一个小程序,供参考,没有环境调试,大概意思就这样,你可以参考自己试试.#include#include#define uchar unsigned char sbit LED=P1^0; uchar buf[16],num; uchar strOpen="Open"; uchar strClose="Close"; void uart() interrupt 4 { if(

再试试:#include<reg52.h>#define uchar unsigned char#define uint unsigned int void main() { PCON = 0; SCON = 0x50; //串口方式1, 8-n-1, 允许接收. TMOD = 0x20; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1; ES = 1; EA = 1; while(1); } void servise() interrupt 4 { RI = 0; P2 = SBUF; }

51单片机一个串口跟几个LED等串联当然是可以这么连接的,但是这样连接没有什么实质意义,达不到分别控制的目的,这样连接,串口也就起到一个普通IO口的作用,LED灯也就是起到一个降压的作用.

#include<reg51.h>#define uchar unsigned char#define uint unsigned int//延时 void DelayMS(uint ms) { uchar i; while(ms--)for(i=0;i<120;i++); }//主程序 void main() { uint a=0x0001; uchar c; SCON=0x00; //串口模式0,即移位寄存器输入/输出方

口中断程序,中断程序里把接收的数据放在一个数组中就行.调试助手设置好串口的波特率,写好要发送的数据,直接发送就OK!

DRIVER之间有并行或串行连接.你所说的与单片机的串行连接,应该查看LED显示屏的用户手册.单色LED显示屏有的是通过RS232通讯,RGB三基色的彩色LED显示屏通讯控制线有多根,可以包括时钟、数据线、输出使能、锁存以及数据输出等信号

这个效果和你的延时时间长短关系不大~ 很可能是没有进行消隐处理~ 错误的操作顺序:【循环扫描显示LED的时候是选中行线,再往列行送相应的点阵电平.然后再选中下一行的行线,再往列行送下一行相应的点阵电平】 仔细思考这其中的细节:如果你在显示第一行的内容之后没有把行上的有效电平取消,然后选中下一行的行线,这个瞬间就会在第二行显示第一行的内容.虽然你的程序马上又会选中正确的行线,但就是这一条指令的时间内的错误造成了整体的闪烁效果.正确的操作方法是:【显示一行之后要把行选线和列选线都置为无效电平.然后再显示下一行内容[这个就是"消隐"]】

网站首页 | 网站地图
All rights reserved Powered by www.zdly.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com