
#define uchar unsigned char
#define uint unsigned int
sbit ring=P3^7
sbit CASE1=P2^0
sbit CASE2=P2^1
sbit CASE3=P2^2
sbit CASE4=P2^3
uchar se=0,re=0
uchar temp=0
void wait(uint cnt)
{
while(--cnt)
}
void send(uchar se)
{
SBUF=se //发送数据
while(TI == 0)
TI = 0
}
//串口接收程序
uchar receive(void)
{
re=SBUF //接收数据
while(RI==0)
RI=0
return re
}
//串口初始化
void sinti(void)
{
SCON = 0x50
TMOD |= 0x20
TH1 = 0xFD
TR1 = 1
EA= 1
ES= 1
}
void delay(int cnt)
{
while(--cnt)
}
//主程序
int main (void)
{
int i
sinti() //串口初始化程序
ring=1
while(1)
{
while (1)
{
if(CASE1==0)
{
send('a')
ring=0
break
}
if(CASE2==0)
{
send('b')
ring=0
break
}
if(CASE3==0)
{
send('c')
ring=0
break
}
if(CASE4==0)
{
send('d')
ring=0
break
}
}
if(ring==0)
{
wait(60000)
ring=1
}
for(i=0i<10000i++)
}
}
//串口中断程序
void UART_SER (void) interrupt 4 //串行中断服务程序
{
if(RI)//判断是接收中断产生
{
RI=0 //标志位清零
temp=SBUF
}
if(TI)//如果是发送标志位,清零
TI=0
}
#include <AT89X51.H>//单片机51头文件,存放着单片机的寄存器unsigned char dat //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit gewei=P2^2 //个位选通定义
sbit shiwei=P2^3//十位选通定义
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71}
//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,}// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 )
{unsigned int i
for(i=0i<100i++)
tc--}
}
void LED()//LED显示接收到的数据
{
shiwei=0
P0=~table[dat/16]
Delay(8)
shiwei=1
gewei=0
P0=~table[dat%16]
Delay(5)
gewei=1
}
void Init_Com(void)//功能:串口初始化,波特率9600,方式1
{
TMOD = 0x20
PCON = 0x00
SCON = 0x50
TH1 = 0xFd
TL1 = 0xFd
TR1 = 1
}
void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////
{
Init_Com()//串口初始化
// P1=0xf0
while(1)
{
if ( RI ) //扫描判断是否接收到数据,
{
dat = SBUF //接收数据SBUF赋与dat
RI=0 //RI清零。
SBUF = dat //在原样把数据发送回去
}
LED() //显示接收到的数据
}
}
第一题,已经测试成功:#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag, a
sbit d = P0^0
void init()
{
TMOD = 0x20 //设置定时器1为工作方式2
TH1 = 0xfd
TL1 = 0xfd
TR1 = 1 //开定时器1
REN = 1 //开串口通信.
SM0 = 0 //设置串口通信方式1
SM1 = 1
EA = 1 //开总中断.
ES = 1 //开串口中断.
}
void delay(uint z)
{
uint x, y
for(x = zx >0x--) for(y = 110y >0y--)
}
void main()
{
init()
a = '4'
while(1) {
if(a == '1') {
d = 0 delay(400)
d = 1 delay(400)
}
else if(a == '2') {
d = 0 delay(200)
d = 1 delay(200)
}
else if(a == '3') {
d = 0 delay(100)
d = 1 delay(100)
}
else if(a == '4') {
d = 1
}
}
}
void ser() interrupt 4
{
if (TI == 1) {
TI = 0
}
else if (RI == 1) {
RI = 0
a = SBUF //中间变量.
flag = 1
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)