久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5012|回復: 9
打印 上一主題 下一主題
收起左側

這個單片機程序,數碼管顯示不全怎么解決啊?

[復制鏈接]
跳轉到指定樓層
樓主

//程序:ex6_1.c
//功能:甲機發送數據程序,采用查詢方式實現
#include <reg51.h>  //包含頭文件reg51.h,定義51單片機的專用寄存器
void main()                        //主函數
{
  unsigned char i;
unsigned char send[]={9,3,5,4,6,7};  //定義要發送的動態密碼數據
        TMOD=0x20;        //定時器T1工作于方式2
        TL1=0xf4;         //波特率為2400bps
        TH1=0xf4;
        TR1=1;        
        SCON=0x40;        //定義串行口工作于方式1
    for (i=0;i<6;i++)
    {
            SBUF=send[ i];     // 發送第i個數據
            while(TI==0);     // 查詢等待發送是否完成
            TI=0;                  // 發送完成,TI由軟件清0
        }
    while(1);
}

  1. //程序:ex6_2.c
  2. //功能:乙機接收及顯示程序,采用查詢方式實現,采用中斷方式實現的程序參見
  3.       //6.3節中的ex6_5.c程序
  4. #include <reg51.h>     //包含頭文件reg51.h,定義51單片機的專用寄存器
  5. code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  6.                                                 //定義0~9共陽極顯示字型碼
  7. unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};//定義接收數據緩沖區
  8. void disp(void);    //顯示函數聲明
  9. void main()                        //主函數
  10. {
  11.     unsigned char i;
  12.         TMOD=0x20;      //定時器T1工作于方式2
  13.         TL1=0xf4;       //波特率定義
  14.         TH1=0xf4;
  15.         TR1=1;
  16.     SCON=0x40;      //定義串行口工作于方式1
  17.     REN=1;                 //接收允許
  18.     for(i=0;i<6;i++)
  19.     {
  20.              while(RI==0);                           //查詢等待,RI為1時,表示接收到數據
  21.              buffer[i]=SBUF;                         //接收數據
  22.              RI=0;                                            //RI由軟件清0
  23.     }
  24.     for(;;) disp();                                //顯示接收數據
  25. }
  26. //函數名:disp
  27. //函數功能:在6個LED上顯示buffer中的6個數
  28. //入口參數:無
  29. //出口參數:無
  30. void disp()
  31. {
  32.    unsigned char w,i,j;
  33.    w=0x01;              //位碼賦初值
  34.    for(i=0;i<6;i++)
  35.    {
  36.      P1=tab[buffer[i]]; // 送共陽極顯示字型段碼,buffer[i]作為數組分量的下標
  37.      P2=~w;             // 送反相后的位碼
  38.      for(j=0;j<255;j++);// 顯示延時
  39.      w<<=1;         
  40.    }
  41. }
復制代碼

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

使用道具 舉報

沙發
ID:332444 發表于 2021-5-25 22:01 | 只看該作者
P1=~tab[buffer[i]]; 試看
回復

使用道具 舉報

板凳
ID:332444 發表于 2021-5-25 22:05 | 只看該作者
for(;;) disp();  無限循環,那其他代碼如何執行?
回復

使用道具 舉報

地板
ID:927246 發表于 2021-5-25 22:07 | 只看該作者
xianfajushi 發表于 2021-5-25 22:05
for(;;) disp();  無限循環,那其他代碼如何執行?

運行時顯示的數字不完整 暫停了顯示的就是完整的數字
回復

使用道具 舉報

5#
ID:927246 發表于 2021-5-25 22:09 | 只看該作者

顯示的數字順序反過來了 但還是不完全
回復

使用道具 舉報

6#
ID:927363 發表于 2021-5-25 23:40 | 只看該作者
P1=~tab[buffer[i]]; 試看
回復

使用道具 舉報

7#
ID:927363 發表于 2021-5-25 23:40 | 只看該作者
for(;;)  無限循環,那其他代碼如何執行?
回復

使用道具 舉報

8#
ID:213173 發表于 2021-5-26 06:35 | 只看該作者
曾某人。 發表于 2021-5-25 22:07
運行時顯示的數字不完整 暫停了顯示的就是完整的數字

這是程序構架問題,接收方不宜使用這種串口查詢方式,會與數碼管顯示方式相互干擾。


  1. //程序:ex6_1.c
  2. //功能:甲機發送數據程序,采用查詢方式實現
  3. #include <reg51.h>  //包含頭文件reg51.h,定義51單片機的專用寄存器
  4. void main()                        //主函數
  5. {
  6.         unsigned char i;
  7.         unsigned char send[]={9,3,5,4,6,7};  //定義要發送的動態密碼數據
  8.         TMOD=0x20;        //定時器T1工作于方式2
  9.         TL1=0xf4;         //波特率為2400bps
  10.         TH1=0xf4;
  11.         TR1=1;        
  12.         SCON=0x40;        //定義串行口工作于方式1
  13.         for(i=0;i<6;i++)
  14.         {
  15.                 SBUF=send[i];     // 發送第i個數據
  16.                 while(TI==0);     // 查詢等待發送是否完成
  17.                 TI=0;             // 發送完成,TI由軟件清0
  18.         }
  19.         while(1);
  20. }
復制代碼
  1. //程序:ex6_2.c
  2. //功能:乙機接收及顯示程序,采用查詢方式實現,采用中斷方式實現的程序參見
  3.       //6.3節中的ex6_5.c程序
  4. #include <reg51.h>     //包含頭文件reg51.h,定義51單片機的專用寄存器
  5. code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  6.                                                 //定義0~9共陽極顯示字型碼
  7. unsigned char buffer[]={0x00,0x00,0x00,0x00,0x00,0x00};//定義接收數據緩沖區
  8. void disp(void);    //顯示函數聲明
  9. void main()                        //主函數
  10. {
  11.         TMOD=0x20;      //定時器T1工作于方式2
  12.         TL1=0xf4;       //波特率定義
  13.         TH1=0xf4;
  14.         TR1=1;
  15.         SCON=0x40;      //定義串行口工作于方式1
  16.         REN=1;                 //接收允許
  17.         EA=1;        //總中斷開
  18.         ES=1;        //串口中斷開
  19.         while(1)
  20.         {
  21.                 disp();                                //顯示接收數據
  22.         }
  23. }

  24. void ser() interrupt 4
  25. {
  26.         static unsigned char i;
  27.         RI=0;
  28.         buffer[i]=SBUF;
  29.    i++;
  30.         if(i==6)
  31.                 i=0;
  32. }

  33. //函數名:disp
  34. //函數功能:在6個LED上顯示buffer中的6個數
  35. //入口參數:無
  36. //出口參數:無
  37. void disp()
  38. {
  39.         static unsigned char i;
  40.         unsigned char j;
  41.         P2|=0xff;                        //消隱
  42.         P1=tab[buffer[i]]; // 送共陽極顯示字型段碼,buffer[i]作為數組分量的下標
  43.         P2&=~(0x01<<i);      //位碼賦值
  44.         for(j=0;j<255;j++);// 顯示延時
  45.    i++;
  46.         if(i==6)
  47.                 i=0;
  48. }
復制代碼



回復

使用道具 舉報

9#
ID:927246 發表于 2021-5-26 22:10 | 只看該作者
wulin 發表于 2021-5-26 06:35
這是程序構架問題,接收方不宜使用這種串口查詢方式,會與數碼管顯示方式相互干擾。

非常感謝
回復

使用道具 舉報

10#
ID:927858 發表于 2021-5-26 22:40 | 只看該作者
是不是沒有延時的問題,切換太快
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色大片免费播放 | 亚洲不卡 | 国产我和子的乱视频网站 | 国外成人在线视频网站 | 欧美中文字幕在线观看 | 日韩欧美精品一区 | 国产一区亚洲二区三区 | 一区二区三区精品视频 | 国产精品成人在线 | 亚洲精品久久久久久国产精华液 | 欧美中文字幕一区二区 | 97精品国产97久久久久久免费 | 亚洲中午字幕 | 一区二区三区在线免费观看视频 | 成人精品视频在线观看 | 热久久999 | 亚洲一二三在线观看 | 毛片区| 国产亚洲精品精品国产亚洲综合 | 国产精品一区二区在线播放 | 97超碰人人| 国产欧美二区 | 亚洲一区二区免费 | 亚洲精品国产电影 | 免费特黄视频 | 黑人一级片视频 | 久久精品久久久久久 | 日本不卡一区二区三区在线观看 | 亚洲精品视频免费 | 日韩欧美在线观看 | 久久亚洲精品国产精品紫薇 | av国产精品毛片一区二区小说 | 国产精品国色综合久久 | 国产成人av在线 | 精品一区二区三区在线观看 | 亚洲国产18 | 日韩精品一区二区三区视频播放 | 日韩精品在线观看免费 | 日韩精品久久久久久 | 精品三区 | 91成人免费 |