2020-02-05 09:14发布
elecfun 发表于 2012-4-2 18:44 百度第一个不是就有吗 http://www.micrelchip.com/cgi-bin/RF/A7105.html
最多设置5个标签!
http://www.micrelchip.com/cgi-bin/RF/A7105.html
跟NRL24L01差不多吧
大哥 这个我也看到了 我是个初学单片机的 我已经把有线传输的单片机排队叫号系统完成了 但是就是不知道怎样来实现无线传输 特别是程序方面我不会写 这个是有线传输的数据 大哥先看看
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit sounder=P3^7;
uchar prompt1[]="Your No.is 00!";
uchar prompt2[]="No.00 Go To Win.0";
uchar prompt3[]="Queue is full ";
uchar prompt4[]="Queue is empty !";
uint num_count=0; //排队叫的号码
uint rank_number[20]={0}; //排队叫号存储的数组
uint num=0; //窗口消的号码
int RankFlag=0; //叫号的标志
int ClearNumFlag=0; //消号的标志
uint LengthFlag=0; //队列长度 叫一次号时+1,消一次号时-1
/*延时函数*/
void delay(uint n)
{
while (n--);
}
/*****************************************
LCD1602 *显示屏命令写入函数*
*****************************************/
void LCD_write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0= com;
delay(1000);
e=1;
delay(1000);
e=0;
}
/*****************************************
LCD1602 *显示屏数据写入函数*
*****************************************/
void LCD_write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0 = dat;
delay(1000);
e=1;
delay(1000);
e=0;
}
/*****************************************
LCD1602 *显示屏清空显示*
*****************************************/
void LCD_clear(void)
{
LCD_write_com(0x01);
delay(1000);
}
/*****************************************
LCD1602 显示屏初始化函数
*****************************************/
void LCD_init(void)
{
LCD_write_com(0x38); /*显示模式设置*/
delay(100);
LCD_write_com(0x38);
delay(100);
LCD_write_com(0x38);
delay(100);
LCD_write_com(0x38);
LCD_write_com(0x08); /*显示关闭*/
LCD_write_com(0x01); /*显示清屏*/
LCD_write_com(0x06); /*显示光标移动设置*/
delay(100);
LCD_write_com(0x0C); /*显示开及光标设置*/
}
/*简单的蜂鸣器提示音*/
void sound()
{ uint a;
for(a=0;a<500;a++)
{
sounder=0;
delay(61);
sounder=1;
}
}
/*获取键值函数*/
uint sweep_key()
{
uint jianzhi;
if(key1==0)
{ delay(1000);
if(key1==0)
jianzhi=1;
RankFlag=1;
}
if(key2==0||key3==0||key4==0||key5==0)
{ delay(1000);
if(key2==0)
jianzhi=2;
if(key3==0)
jianzhi=3;
if(key4==0)
jianzhi=4;
if(key5==0)
jianzhi=5;
ClearNumFlag=1;
}
return (jianzhi);
}
/*****************************************
叫号机 按一次一号键变量+1,最大为20
*****************************************/
void QueueNumProcess()
{
if(RankFlag==1) //判断叫号标志是否有效
{
if ( LengthFlag<20)
{
num_count++;
rank_number[LengthFlag] = num_count;
}
LengthFlag++;
}
}
/*****************************************
窗口消号处理函数
*****************************************/
void ClearNumProcess()
{
uint i;
if (ClearNumFlag==1) //判断消号标志是否有效
{
num=rank_number[0]; //把消的号赋给全局变量num
for(i=0;i<19;i++) //让数组整体左移一个存储单元,即把消得号删除
{
rank_number=rank_number[i+1];
}
LengthFlag--;
}
}
/*****************************************
检测到按键后,检测函数处理及LCD显示处理
*****************************************/
void CheckButtonProcess(uint m) //m代表检测到的键值
{
uint jz,i;
jz=m;
if((jz==1) && (RankFlag==1))
{
// 当队列人数达到20时,提示
// Queue is full
if( LengthFlag>=20 )
{
LCD_clear();
LCD_write_com(0x80+0x02);
delay(100);
for(i=0;i<16;i++)
{
LCD_write_data(prompt3);
delay(100);
}
}
else
{
QueueNumProcess();
prompt1[11]=(num_count)/10+'0';
prompt1[12]=(num_count)%10+'0';
LCD_clear();
LCD_write_com(0x80+02);
delay(100);
for(i=0;i<15;i++)
{
LCD_write_data(prompt1); //"Your No.is 00!";
delay(100);
}
RankFlag=0;
}
}
if((jz==2||jz==3||jz==4||jz==5) && ClearNumFlag==1)
{
if(LengthFlag==0)
{
LCD_clear();
LCD_write_com(0x80+0);
delay(1000);
for(i=0;i<16;i++)
{
LCD_write_data(prompt4);//"Queue is empty ";
delay(100);
}
delay(65535); //无人排队时屏幕自动清屏,计数归零
LCD_clear();
num_count=0;
}
else
{
ClearNumProcess(); //消号处理,营业员操作
sound();
prompt2[3]=num/10+'0';
prompt2[4]=num%10+'0';
prompt2[15]=(jz-1)+'0';
LCD_clear();
LCD_write_com(0x80+0);
delay(100);
for(i=0;i<16;i++)
{
LCD_write_data(prompt2); //"No.00 come to No.0";
delay(100);
}
ClearNumFlag=0;
}
}
}
/*****************************************
main 函数
*****************************************/
void main()
{
uint Kvalue;
LCD_init();
while(1)
{
Kvalue=sweep_key(); //获取键值
if (RankFlag==1 || ClearNumFlag==1)//判断叫号标志和消号标志是否有效
CheckButtonProcess(Kvalue);
delay(200);
RankFlag=0; //使叫号标志无效
ClearNumFlag=0; //使消号标志无效
Kvalue=0; //键值清0
}
}
一周热门 更多>