找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2312|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)串口發(fā)射 接收顯示二極管,四個(gè)按鍵控制四種顯示狀態(tài)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
按鍵1按下從上到下點(diǎn)亮
按鍵2按下從兩頭往中間點(diǎn)亮
按鍵3按下從中間往兩邊點(diǎn)亮
按鍵4按下從下面往上點(diǎn)亮

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #define ILEN 8                                         //接收緩沖區(qū)大小
  3. unsigned char display_data[ILEN][8];                //顯示方式數(shù)據(jù)緩沖存儲(chǔ)區(qū)
  4. unsigned char istart=0;                                //接收緩沖區(qū)起始索引
  5. unsigned char iend=0;                                //接收緩沖區(qū)結(jié)束索引
  6. unsigned int dat_size[ILEN]=0;                        //顯示方式數(shù)據(jù)長度存儲(chǔ)區(qū)
  7. /******************************************************
  8. 函數(shù)功能:延時(shí)N微秒
  9. ******************************************************/
  10. void delay_nus(unsigned int i)
  11. {
  12.   i=i/10;
  13.   while(--i);
  14. }
  15. /******************************************************
  16. 函數(shù)功能:延時(shí)N毫秒
  17. ******************************************************/
  18. void delay_nms(unsigned int n)
  19. {
  20.   n=n+1;
  21.   while(--n)
  22.     delay_nus(900);
  23. }
  24. void main()
  25. {
  26.   unsigned char j;
  27.   TMOD=0x20;      //定時(shí)器T1工作方式2
  28.   SCON=0x50;      //串口工作方式1
  29.   PCON=0x00;      //SMOD=0,波特率不倍增
  30.   TH1=0xfd;
  31.   TL1=0xfd;          //根據(jù)規(guī)定給定時(shí)器T1賦初值,即波特率為9600b/s
  32.   TR1=1;          //啟動(dòng)定時(shí)器T1
  33.   ES=1;              //串口中斷允許
  34.   EA=1;              //開啟總中斷
  35.   while(1)
  36.   {
  37.     while(iend == istart)       //等待數(shù)據(jù)緩沖區(qū)出現(xiàn)新數(shù)據(jù)
  38.       ;
  39.     for(j=0;j < dat_size[istart & (ILEN-1)];j++)  //根據(jù)顯示數(shù)據(jù)長度取出數(shù)據(jù)
  40.     {
  41.       P1=display_data[istart & (ILEN-1)][j];   //送顯示數(shù)據(jù)
  42.       delay_nms(500);
  43.     }
  44.     istart++;          //為下次從緩沖區(qū)取出一組顯示數(shù)據(jù)做好準(zhǔn)備
  45.   }
  46. }
  47. /******************************************************
  48. 函數(shù)功能:串口中斷接收服務(wù)函數(shù)
  49. ******************************************************/
  50. void com_isr() interrupt 4 using 1
  51. {
  52.    unsigned char c;
  53.    static unsigned char i=0;
  54.    if(RI==1)           //是否接收完成
  55.    {
  56.      c=SBUF;             //從緩沖寄存器中取出數(shù)據(jù)
  57.      RI=0;               //軟件清零
  58.      if(istart+ILEN !=iend )   //判斷緩沖區(qū)是否以存滿
  59.      {
  60.        if(c!=0xff)              //判斷接收的數(shù)據(jù)是否是結(jié)束標(biāo)志數(shù)據(jù)
  61.        {
  62.          display_data[iend & (ILEN-1)][i++]=c;    //緩沖區(qū)接收數(shù)據(jù)
  63.        }
  64.        else                      //一組顯示數(shù)據(jù)接收完成
  65.        {
  66.          dat_size[iend & (ILEN-1)]=i;     //同時(shí)存儲(chǔ)該組數(shù)據(jù)的長度
  67.          iend++;            //為接收下組數(shù)據(jù)做好準(zhǔn)備
  68.          i=0;
  69.        }
  70.      }  
  71.    }
  72. }
復(fù)制代碼

所有資料51hei提供下載:
串口發(fā)射 接收四種方式點(diǎn)亮8個(gè)二極管.rar (78.96 KB, 下載次數(shù): 15)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表