#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=1; //開串口中斷
EA=1; //開總中斷
TR1=1; //啟動定時器1
}
void main()
{
u16 L0=0,L1=0,L2=0,L3=0,d,n=0,w=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++;
}
}
}
|