以下是主程序
#include <stc12c5a60s2.h>
#include <lcd.h>
#include <intrins.h>
#include <BT.h>
#define uchar unsigned char
#define uint unsigned int
#define MAIN_Fosc 11059200L
// 7 6 5 4 3 2 1 0 Reset Value
//sfr ADC_CONTR = 0xBC; ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000
#define ADC_OFF() ADC_CONTR = 0
#define ADC_ON (1 << 7)
#define ADC_90T (3 << 5)
#define ADC_180T (2 << 5)
#define ADC_360T (1 << 5)
#define ADC_540T 0
#define ADC_FLAG (1 << 4)
#define ADC_START (1 << 3)
#define ADC_CH0 0
#define ADC_CH1 1
#define ADC_CH2 2
#define ADC_CH3 3
#define ADC_CH4 4
#define ADC_CH5 5
#define ADC_CH6 6
#define ADC_CH7 7
sbit P_TXD1 = P3^1;
sbit k1 = P2^0;
sbit k2 = P2^1;
sbit buzzer = P3^7;
int wind_set = 50;
float wind_speed = 0.0;
float wind_ppm = 0.0;
void wind_Value_Conversion();
void Tx1Send(uchar dat);
void StartUART( void )
{
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
PCON = 0x00;
TR1 = 1;
}
uint adc10_start(uchar channel) //channel = 0~7
{
uint adc;
uchar i;
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xe0) | ADC_START | channel;
i = 250;
do{
if(ADC_CONTR & ADC_FLAG)
{
ADC_CONTR &= ~ADC_FLAG;
adc = (uint)ADC_RES;
adc = (adc << 2) | (ADC_RESL & 3);
return adc;
}
}while(--i);
return 1024;
}
//Ñóê±oˉêy//
void Delay1(unsigned int time)
{
unsigned int timeCounter = 0;
for (timeCounter = time;timeCounter > 0 ;timeCounter --)
DelayUs(255);
}
void DelayUs(unsigned int time)
{
unsigned int timeCounter = 0;
for (timeCounter = 0;timeCounter < time;timeCounter ++)
_nop_();
}
void press_k1()
{
if(k1 == 0)
{
Delay1(100);
if(k1 == 0)
{
wind_set += 1;
if(wind_set>999)
{
wind_set = 0;
}
}
}
}
void press_k2()
{
if(k2 == 0)
{
Delay1(100);
if(k2 == 0)
{
wind_set -= 1;
if(wind_set<0)
{
wind_set = 999;
}
}
}
}
void display_set() //°′¼üéèÖÃÏÔê¾
{
uchar num1, num2, num3;
num1 = wind_set/100+'0';
num2 = wind_set%100/10+'0';
num3 = wind_set%10+'0';
DisplaySingleChar(0x04,1,num1);
DisplaySingleChar(0x05,1,num2);
DisplaySingleChar(0x06,1,num3);
DisplayString(0x7,1,"km/h");
}
void main()
{
StartUART();
P1ASF = 0x07;
ADC_CONTR = ADC_360T | ADC_ON;
LCDInit();
DisplayString(0x0,0," Welcome... ");
DisplayString(0x0,1,"Wind Speed");
Delay1(500);
WriteCmd(LCD_CLS);
DisplayString(0x0,0,"Speed:");
DisplayString(0x0,1,"Set:");
while(1)
{
press_k1();
press_k2();
wind_speed = adc10_start(0);
wind_Value_Conversion();
display_set();
if(wind_ppm>=wind_set)
{
buzzer = 0;
}
else
{
buzzer = 1;
}
}
}
void wind_Value_Conversion() //·çËù2aá¿
{
uchar num1, num2, num3;
wind_speed=(wind_speed*5)/1024;
wind_ppm = 100*wind_speed ;
num1 = (int)(wind_ppm)/100;
num2 = (int)(wind_ppm)/10;
num3 = (int)(wind_ppm)%10;
DisplaySingleChar(0x06,0,num1+0x30);
DisplaySingleChar(0x07,0,num2+0x30);
DisplaySingleChar(0x08,0,num3+0x30);
DisplayString(0x9,0,"km/h");
Tx1Send(0x23);
Tx1Send(num1+0x30);
Tx1Send(num2+0x30);
Tx1Send(num3+0x30);
}
//Ä£Äa′®¿ú·¢Ëí
void Tx1Send(uchar R_Byte) //9600£¬N£¬8£¬1 ·¢Ëíò»¸ö×Ö½ú
{
SBUF = R_Byte;
while( TI == 0 ); //2éÑˉ·¨
TI = 0;
}
以下是网上找的又经过自己乱改的蓝牙程序
void sendDate(uchar dat);
void UartConfiguration()
{
TMOD=0x20; //设置计数器1的工作方式2
TH1=0xfd; //设置计数器1的初值,决定波特率
TL1=0xfd; //设置计数器1的初值,决定波特率
PCON=0x00; // 波特率倍增0x00不加倍 0x80加倍
SCON=0x50; //设置工作方式1 开启接受允许
EA=1; //开启总中断
ES=1; //开启串口接受中断
TR1=1; //计数器1开始运行
}
/*发送数据*/
void sendDate(char date)
{
SBUF=date; //接收到的数据放入发送缓存器发送
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
/*主函数*/
void main()
{
UartConfiguration();
sendDate('1'); //发送字符1
while(1);
}
/*中断函数*/
void Uart() interrupt 4
{
uchar date;
date=SBUF; //取出接受到的数据
RI=0; //清除接受中断标志位
//收到的数据是date
}
说实话我真是很菜,求大家高抬贵手,不要喷我,谢谢大家~
|