标题:
串口程序。电脑发送字母下位机接收显示流水灯和数码管显示
[打印本页]
作者:
腾飞的龙
时间:
2015-12-12 18:48
标题:
串口程序。电脑发送字母下位机接收显示流水灯和数码管显示
电脑发送大写A下位机显示流水灯。电脑发送大写字母B下位机数码管显示0-F.
/*******************************************************
功能 :串口程序。电脑发送字母,下位机(实验板)
显示流水灯和数码管显示0-F
单片机:STC12C5A60S2
晶振 :11.0592M(必须用这个频率的晶振要不会出错)
作者 :苏义江
时间 ; 20015-12-12
注释 :数码管用P2口通过锁存器573驱动位和段。
位的锁存端用P0^6控制
段的锁存端用P0^7控制
*******************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wei=P0^6;//位使能
sbit duan=P0^7;//段使能
//共阳数码管段码
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,
0xa1,0x86,0x8e,0x89};
//位码
uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar a,i;
void init_uart()//串口初始化
{
TMOD=0X20;//T1工作在方式2及自动重装
TH1=0XFD;//波特率9600
TL1=0XFD;
TR1=1;
// SCON=0X50; //SCON=0X50也可以写成SM0=0;SM1=1;
SM0=0;
SM1=1;
REN=1;
ES=1; //启动串口中断
EA=1;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=700;y>0;y--);
}
void liushui()//流水灯
{
for(i=0;i<8;i++)
{
P0=tab[i];
delay(200);
}
}
void diplay()//数码管显示0-F
{
wei=1; //打开573位码锁存端
P2=0;
wei=0; //锁存数据
for(i=0;i<16;i++)
{
duan=1; //打开573段码锁存端
P2=table[i];
duan=0; //锁存数据
delay(1000);
P2=0XFF; //消隐
}
}
void main()
{
init_uart();
while(1);
}
void uate() interrupt 4
{
ES=0; //先关闭串口中断防止出错
RI=0; //发送标志位清零
a=SBUF;
switch(a)
{
case 'A': liushui();break;//电脑发送A实验板显示流水灯
case 'a': P0=0; break;//电脑发送a实验板显示LED灯全亮
case 'B': diplay();break;//电脑发送B实验板数码管显示0-F
}
ES=1;//启动串口中断,继续发送
}
复制代码
作者:
a15616
时间:
2015-12-19 15:02
RI=0;//接收标志位清零;ES=1;//启动串口中断,继续接收。
作者:
腾飞的龙
时间:
2015-12-19 16:31
a15616 发表于 2015-12-19 15:02
RI=0;//接收标志位清零;ES=1;//启动串口中断,继续接收。
谢谢你的指正。TI是发送,RI是接收。
作者:
3263065307
时间:
2016-5-5 20:27
for(i=0;i<16;i++) { duan=1; //打开573段码锁存端 duan=0; //锁存数据 P0=table[i]; wei=1; //打开573位码锁存端 wei=0; delay(100); P0=0XFF; //消隐 }不然会出现位码不正确的现象
作者:
腾飞的龙
时间:
2016-5-6 09:26
串口在单片机中还是很重要的。比如蓝牙小车的控制就是利用串口发送和接收的。
作者:
lymk3321
时间:
2019-4-23 18:51
我试试了不可以
作者:
lymk3321
时间:
2019-4-23 19:12
程序有问题把
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1