wangjun413 发表于 2012-4-2 18:31:54

各位大侠帮帮忙吧 基于单片机的排队叫号系统 需要用A7105

    各位大哥大姐,帮帮忙吧,真的是想破头都没法解决这个问题,我们老师要求设计一个基于单片机的排队叫号系统,这个还好办,但是关键是他要求我用无线通信模块A7105   我之前都没听说过根本不知道如何实现A7105和单片机之间的信号的传递   程序根本不晓得怎样写,大哥们帮帮小弟吧,小弟在这感激不尽   

elecfun 发表于 2012-4-2 18:44:49

百度第一个不是就有吗

http://www.micrelchip.com/cgi-bin/RF/A7105.html


跟NRL24L01差不多吧

srygg 发表于 2012-4-2 18:48:41

用得着想破头吗?百度上很多A7105的资料啊!

wangjun413 发表于 2012-4-2 19:33:51

elecfun 发表于 2012-4-2 18:44 static/image/common/back.gif
百度第一个不是就有吗

http://www.micrelchip.com/cgi-bin/RF/A7105.html


大哥这个我也看到了我是个初学单片机的我已经把有线传输的单片机排队叫号系统完成了但是就是不知道怎样来实现无线传输特别是程序方面我不会写这个是有线传输的数据大哥先看看
#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={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 = num_count;
      }
      LengthFlag++;
   }
}
/*****************************************
窗口消号处理函数
*****************************************/
void ClearNumProcess()
{
   uint i;
   if (ClearNumFlag==1)   //判断消号标志是否有效
   {
      num=rank_number;   //把消的号赋给全局变量num
      for(i=0;i<19;i++)   //让数组整体左移一个存储单元,即把消得号删除
      {
             rank_number=rank_number;
      }
      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=(num_count)/10+'0';
             prompt1=(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=num/10+'0';
             prompt2=num%10+'0';
               prompt2=(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
   }
}

北斗一苇 发表于 2012-5-29 17:09:35

学习了{:smile:}{:smile:}{:smile:}{:smile:}
页: [1]
查看完整版本: 各位大侠帮帮忙吧 基于单片机的排队叫号系统 需要用A7105