專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

雙機(jī)通信(C語(yǔ)言、主機(jī)和從機(jī)共用程序)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2010年02月11日   【字體:

/*
發(fā)送和接收程序:即主機(jī)和從機(jī)可共用此程序
程序效果:通過(guò)主機(jī)發(fā)送,從機(jī)接收
在主機(jī)中通過(guò)記下按鍵按下的次數(shù),主機(jī)中顯示最后
按下的六個(gè)數(shù)值,并發(fā)送給從機(jī),從機(jī)也顯示這六個(gè)數(shù)值
單片機(jī)類型:stc89c52
完整程序下載地址:
http://www.torrancerestoration.com/ziliao/file/shuangjidanduc.rar
*/

#include<reg52.h> //頭文件
#include<intrins.h> //循環(huán)移位文件
#define uchar unsigned char//宏定義
#define uint  unsigned int
sbit key1=P3^5;   //位聲明
uchar code table[]={0X00,0x3f,0x06,0x5b,//數(shù)碼管顯示的數(shù)值
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar table_tr[6];//暫存最后按下的六個(gè)數(shù)值
uchar count,cnt;
//延時(shí)子函數(shù),用于數(shù)碼管顯示
void delay(uchar i)
{
     uchar x,y;
     for(x=i;x>0;x--)
          for(y=110;y>0;y--);
}
//初始化子函數(shù)
void init()
{
     TMOD=0x20;//T1工作在方式2
     TH1=0XF4;//波特率為4.8kbit/s
     TL1=0XF4;
     TR1=1;//啟動(dòng)定時(shí)器1
     SCON=0X50;//串口工作在方式1,允許接收
}
//顯示子函數(shù)
void display()
{
     uchar i,j;//定義局部變量
     j=0x7f;  //賦初值
     for(i=0;i<6;i++)
     {
          P2=j;  //點(diǎn)亮最右邊的數(shù)碼管
          P0=table[table_tr[i]]; //顯示該數(shù)值
          delay(10);    //延時(shí),便于眼睛看清
          j=_cror_(j,1);//循環(huán)右移一位
     }
}
//按鍵掃描子函數(shù)
void key_scan()
{
     if(key1==0) //判斷是否有按鍵按下
     {
          while(!key1)  //等待按鍵松手
          {
               display();//防止掉顯
          }
          cnt++; //加1,用于顯示
          SBUF=cnt;//送給緩沖區(qū),發(fā)送
          while(!TI); //等待發(fā)送完
          TI=0;   //發(fā)送完了,標(biāo)志位清零
          for(count=0;count<5;count++) //用于保存最后按下的六個(gè)按鍵數(shù)值
          {
               table_tr[count]=table_tr[count+1];
          }
          table_tr[5]=cnt; //把最后按下的按鍵數(shù)值賦給table_tr【5】
          if(cnt==10) //按鍵按下的次數(shù)有沒(méi)有等于10
           cnt=0;//等于,則清零
     }
}
void main()
{
     uchar i;
     init(); //調(diào)用初始化子函數(shù)
     P0=0x00;
     while(1)
     {
          while(RI) //判斷是否接受完
          {
               RI=0;//接受完了,標(biāo)志位清零
               for(i=0;i<5;i++)  //把數(shù)組的數(shù)值都往前移一位,騰出table_tr【5】
                    table_tr[i]=table_tr[i+1];
               table_tr[5]=SBUF;//裝入接收的數(shù)值
          }
          key_scan(); //調(diào)用鍵盤掃描子函數(shù)
          display();//調(diào)用顯示子函數(shù)

     }
}

關(guān)閉窗口

相關(guān)文章