#include "reg52.h"
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit beep=P1^5;
sbit a=P2^0 ;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
//串口发送用到的变量
u8 transmit[4];
u8 count_fs=0;
u8 code smgduan[10]={
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f, //9
} ;
void delay(u16 i)
{
while(i--); //延时函数,i=1时,大约延时10us
}
//串口初始化程序
void UART_Init()
{
TMOD=TMOD&0x0f|0x20; //设置定时器1,工作方式2
TH1=0XFD; //定时器1赋初值,0xf3代表串口波特率是2400
TL1=0XFD;
SM0=0; //设定串口工作方式1
SM1=1;
REN=1; //允许串口接收
ES=0; //开串口中断
EA=1; //开总中断
TR1=1; //启动定时器1
}
void main()
{
u16 d,n=0,w=0,flag=0,L0=0,L1=0,L2=0,L3=0;
UART_Init();
TMOD|=0X01; // 01定时 04计数 选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0X3C; //给定时器赋初值,定时1ms
TL0=0XB0;
TR0=1; //打开定时器
if(w==0)
{ if(a==1)
{
delay(100);
if(a==1)
{
L0++;
//以下程序是将下位机的震动的次数通过串口传给蓝牙
//在这里,通讯协议为: L3 L2 L1 L0 一共4个字节
transmit[0]=L3;
transmit[1]=L2;
transmit[2]=L1;
transmit[3]=L0;
count_fs=0;
SBUF=transmit[count_fs];//在这里发送数组的第一个字节给串口
count_fs++;
while(1)
{
if(L0==10)
{
L0=0;
L1++;
}
if(L1==10)
{
L1=0;
L2++;
}
if(L2==10)
{
L2=0;
L3++;
}
if(L3==10)
{
L3=0;
L0=0;L1=0;L2=0;
}
for(d=0;d<4;d++)
{
switch(d)
{
case(0):
LSA=0;LSB=0;LSC=0;P0=smgduan[L0]; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0;P0=smgduan[L1]; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0;P0=smgduan[L2]; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0;P0=smgduan[L3]; break;//显示第3位
}
delay(100);
P0=0x00; //消隐
}
if(a==1)
delay(1000);
if(a==1)
{
L0++;
//以下程序是将下位机的震动的次数通过串口传给蓝牙
//在这里,通讯协议为: L3 L2 L1 L0 一共4个字节
transmit[0]=L3;
transmit[1]=L2;
transmit[2]=L1;
transmit[3]=L0;
count_fs=0;
SBUF=transmit[count_fs];//在这里发送数组的第一个字节给串口
count_fs++;
}
if(TF0==1)
{
TF0=0;
TH0=0X3C; //重置定时常数
TL0=0XB0;
n++;
if(n>200)
{
n=0;
w=1;
}
if(w==1)
a=0;
}
}
}
}
}
}
//串口中断服务程序
void UART_Int() interrupt 4
{
if(RI==1)
{
RI=0;
}
else //产生发送中断 TI=1
{
TI=0;
if(count_fs!=4) //利用串口中断发送数组中的第2个字节到第6个字节给串口
{
SBUF=transmit[count_fs];
count_fs++;
}
}
}
|