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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

4位串行74hc595數碼管顯示簡單的單片機串口通信

[復制鏈接]
跳轉到指定樓層
樓主
ID:497360 發表于 2019-3-24 21:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
123 132 213 231 312 321 這六個數字信息,
TTL通信輸入51單片機后,
顯示到4位串行595數碼管的程序如何寫?

并且串口通信和數碼管顯示的程序單獨運行都沒問題。
關鍵是怎樣才能組合到一起用???
下面是數碼管顯示代碼,要在程序里改動j=231;switch(j)才能顯示。
#include <AT89X51.H>
unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char  disbuf[4]={0,0,0,0};
//-----------------------------------------------------------------------------
// 函數原形定義
#define uchar unsigned char


void main (void);                                        // 主函數
void LED4_Display (void);                        // LED顯示
void LED_OUT(uchar X);                                // LED單字節串行移位函數


unsigned char code LED_0F[];                // LED字模表


sbit DIO = P1^0;                                //串行數據輸入
sbit RCLK  = P1^1;                                //時鐘脈沖信號——上升沿有效
sbit SCLK = P1^2;                                //打入信號————上升沿有效


//-----------------------------------------------------------------------------
// 全局變量
uchar LED[8];        //用于LED的8位顯示緩存

//*****************************************************************************
// 主程序
//
void main (void)
{


        LED[0]=1;
        LED[1]=2;
        LED[2]=3;
        


        while(1)
        {
                LED4_Display ();
        }
}


void LED4_Display (void)
{
        unsigned char code *led_table;          // 查表指針
        uchar i;
        uchar j;
        j=231;                                // *****
        switch(j)
        {
          case 123:                //顯示第1位
        led_table = LED_0F + LED[0];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x04);               


        RCLK = 0;
        RCLK = 1;
        //顯示第2位
        led_table = LED_0F + LED[1];
        i = *led_table;


        LED_OUT(i);               
        LED_OUT(0x02);               


        RCLK = 0;
        RCLK = 1;
        //顯示第3位
        led_table = LED_0F + LED[2];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x01);        


        RCLK = 0;
        RCLK = 1;break;
        case 132:         //顯示第1位
        led_table = LED_0F + LED[0];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x02);               


        RCLK = 0;
        RCLK = 1;
        //顯示第2位
        led_table = LED_0F + LED[1];
        i = *led_table;


        LED_OUT(i);               
        LED_OUT(0x04);               


        RCLK = 0;
        RCLK = 1;
        //顯示第3位
        led_table = LED_0F + LED[2];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x01);               
        RCLK = 0;
        RCLK = 1;break;
        case 213:         //顯示第1位
        led_table = LED_0F + LED[0];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x04);               


        RCLK = 0;
        RCLK = 1;
        //顯示第2位
        led_table = LED_0F + LED[1];
        i = *led_table;


        LED_OUT(i);               
        LED_OUT(0x01);               


        RCLK = 0;
        RCLK = 1;
        //顯示第3位
        led_table = LED_0F + LED[2];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x02);        


        RCLK = 0;
        RCLK = 1;break;
        case 231:         //顯示第1位
        led_table = LED_0F + LED[0];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x01);               


        RCLK = 0;
        RCLK = 1;
        //顯示第2位
        led_table = LED_0F + LED[1];
        i = *led_table;


        LED_OUT(i);               
        LED_OUT(0x04);               


        RCLK = 0;
        RCLK = 1;
        //顯示第3位
        led_table = LED_0F + LED[2];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x02);        


        RCLK = 0;
        RCLK = 1;break;
        case 312:         //顯示第1位
        led_table = LED_0F + LED[0];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x02);               


        RCLK = 0;
        RCLK = 1;
        //顯示第2位
        led_table = LED_0F + LED[1];
        i = *led_table;


        LED_OUT(i);               
        LED_OUT(0x01);               


        RCLK = 0;
        RCLK = 1;
        //顯示第3位
        led_table = LED_0F + LED[2];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x04);        


        RCLK = 0;
        RCLK = 1;break;
        case 321:         //顯示第1位
        led_table = LED_0F + LED[0];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x01);               


        RCLK = 0;
        RCLK = 1;
        //顯示第2位
        led_table = LED_0F + LED[1];
        i = *led_table;


        LED_OUT(i);               
        LED_OUT(0x02);               


        RCLK = 0;
        RCLK = 1;
        //顯示第3位
        led_table = LED_0F + LED[2];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x04);        


        RCLK = 0;
        RCLK = 1;break;
        }
/*        //顯示第1位
        led_table = LED_0F + LED[0];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x04);               


        RCLK = 0;
        RCLK = 1;
        //顯示第2位
        led_table = LED_0F + LED[1];
        i = *led_table;


        LED_OUT(i);               
        LED_OUT(0x02);               


        RCLK = 0;
        RCLK = 1;
        //顯示第3位
        led_table = LED_0F + LED[2];
        i = *led_table;


        LED_OUT(i);                        
        LED_OUT(0x01);        


        RCLK = 0;
        RCLK = 1;*/


}


void LED_OUT(uchar X)
{
        uchar i;
        for(i=8;i>=1;i--)
        {
                if (X&0x80) DIO=1; else DIO=0;
                X<<=1;
                SCLK = 0;
                SCLK = 1;
        }
}


unsigned char code LED_0F[] =
{// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};


下面就是簡單的串口通信程序了。


/**************************************************************************************
*                              串口通信實驗                                                                                                  *
實現現象:下載程序后打開串口調試助手,將波特率設置為4800,選擇發送的數據就可以顯示
                        在串口助手上。
注意事項:無。                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;


/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能                   :設置串口
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void UsartInit()
{
        SCON=0X50;                        //設置為工作方式1
        TMOD=0X20;                        //設置計數器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //計數器初始值設置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打開接收中斷
        EA=1;                                                //打開總中斷
        TR1=1;                                        //打開計數器
}

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        UsartInit();  //        串口初始化
        while(1);               
}

/*******************************************************************************
* 函數名         : Usart() interrupt 4
* 函數功能                  : 串口通信中斷函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void Usart() interrupt 4
{
        u8 receiveData;

        receiveData=SBUF;//出去接收到的數據
        RI = 0;//清除接收中斷標志位
        SBUF=receiveData;//將接收到的數據放入到發送寄存器
        while(!TI);                         //等待發送數據完成
        TI=0;                                                 //清除發送完成標志位
}




求大佬指點怎樣把兩個程序合并!!!!!
  1. #include <AT89X51.H>

  2. unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  3. unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  4. unsigned char  disbuf[4]={0,0,0,0};


  5. //-----------------------------------------------------------------------------
  6. // 函數原形定義
  7. #define uchar unsigned char

  8. void main (void);                                        // 主函數
  9. void LED4_Display (void);                        // LED顯示
  10. void LED_OUT(uchar X);                                // LED單字節串行移位函數

  11. unsigned char code LED_0F[];                // LED字模表

  12. sbit DIO = P1^0;                                //串行數據輸入
  13. sbit RCLK  = P1^1;                                //時鐘脈沖信號——上升沿有效
  14. sbit SCLK = P1^2;                                //打入信號————上升沿有效

  15. //-----------------------------------------------------------------------------
  16. // 全局變量
  17. uchar LED[8];        //用于LED的8位顯示緩存


  18. //*****************************************************************************
  19. // 主程序
  20. //
  21. void main (void)
  22. {

  23.         LED[0]=1;
  24.         LED[1]=2;
  25.         LED[2]=3;
  26.         

  27.         while(1)
  28.         {
  29.                 LED4_Display ();
  30.         }
  31. }

  32. void LED4_Display (void)
  33. {
  34.         unsigned char code *led_table;          // 查表指針
  35.         uchar i;
  36.         uchar j;
  37.         j=231;                                // *****
  38.         switch(j)
  39.         {
  40.           case 123:                //顯示第1位
  41.         led_table = LED_0F + LED[0];
  42.         i = *led_table;

  43.         LED_OUT(i);                        
  44.         LED_OUT(0x04);               

  45.         RCLK = 0;
  46.         RCLK = 1;
  47.         //顯示第2位
  48.         led_table = LED_0F + LED[1];
  49.         i = *led_table;

  50.         LED_OUT(i);               
  51.         LED_OUT(0x02);               

  52.         RCLK = 0;
  53.         RCLK = 1;
  54.         //顯示第3位
  55.         led_table = LED_0F + LED[2];
  56.         i = *led_table;

  57.         LED_OUT(i);                        
  58.         LED_OUT(0x01);        

  59.         RCLK = 0;
  60.         RCLK = 1;break;
  61.         case 132:         //顯示第1位
  62.         led_table = LED_0F + LED[0];
  63.         i = *led_table;

  64.         LED_OUT(i);                        
  65.         LED_OUT(0x02);               

  66.         RCLK = 0;
  67.         RCLK = 1;
  68.         //顯示第2位
  69.         led_table = LED_0F + LED[1];
  70.         i = *led_table;

  71.         LED_OUT(i);               
  72.         LED_OUT(0x04);               

  73.         RCLK = 0;
  74.         RCLK = 1;
  75.         //顯示第3位
  76.         led_table = LED_0F + LED[2];
  77.         i = *led_table;

  78.         LED_OUT(i);                        
  79.         LED_OUT(0x01);               
  80.         RCLK = 0;
  81.         RCLK = 1;break;
  82.         case 213:         //顯示第1位
  83.         led_table = LED_0F + LED[0];
  84.         i = *led_table;

  85.         LED_OUT(i);                        
  86.         LED_OUT(0x04);               

  87.         RCLK = 0;
  88.         RCLK = 1;
  89.         //顯示第2位
  90.         led_table = LED_0F + LED[1];
  91.         i = *led_table;

  92.         LED_OUT(i);               
  93.         LED_OUT(0x01);               

  94.         RCLK = 0;
  95.         RCLK = 1;
  96.         //顯示第3位
  97.         led_table = LED_0F + LED[2];
  98.         i = *led_table;

  99.         LED_OUT(i);                        
  100.         LED_OUT(0x02);        

  101.         RCLK = 0;
  102.         RCLK = 1;break;
  103.         case 231:         //顯示第1位
  104.         led_table = LED_0F + LED[0];
  105.         i = *led_table;

  106.         LED_OUT(i);                        
  107.         LED_OUT(0x01);               

  108.         RCLK = 0;
  109.         RCLK = 1;
  110.         //顯示第2位
  111.         led_table = LED_0F + LED[1];
  112.         i = *led_table;

  113.         LED_OUT(i);               
  114.         LED_OUT(0x04);               

  115.         RCLK = 0;
  116.         RCLK = 1;
  117.         //顯示第3位
  118.         led_table = LED_0F + LED[2];
  119.         i = *led_table;

  120.         LED_OUT(i);                        
  121.         LED_OUT(0x02);        

  122.         RCLK = 0;
  123.         RCLK = 1;break;
  124.         case 312:         //顯示第1位
  125.         led_table = LED_0F + LED[0];
  126.         i = *led_table;

  127.         LED_OUT(i);                        
  128.         LED_OUT(0x02);               

  129.         RCLK = 0;
  130.         RCLK = 1;
  131.         //顯示第2位
  132.         led_table = LED_0F + LED[1];
  133.         i = *led_table;

  134.         LED_OUT(i);               
  135.         LED_OUT(0x01);               

  136.         RCLK = 0;
  137.         RCLK = 1;
  138.         //顯示第3位
  139.         led_table = LED_0F + LED[2];
  140.         i = *led_table;

  141.         LED_OUT(i);                        
  142.         LED_OUT(0x04);        

  143.         RCLK = 0;
  144.         RCLK = 1;break;
  145.         case 321:         //顯示第1位
  146.         led_table = LED_0F + LED[0];
  147.         i = *led_table;

  148.         LED_OUT(i);                        
  149.         LED_OUT(0x01);               

  150.         RCLK = 0;
  151.         RCLK = 1;
  152.         //顯示第2位
  153.         led_table = LED_0F + LED[1];
  154.         i = *led_table;

  155.         LED_OUT(i);               
  156.         LED_OUT(0x02);               

  157.         RCLK = 0;
  158.         RCLK = 1;
  159.         //顯示第3位
  160.         led_table = LED_0F + LED[2];
  161.         i = *led_table;

  162.         LED_OUT(i);                        
  163.         LED_OUT(0x04);        

  164.         RCLK = 0;
  165.         RCLK = 1;break;
  166.         }
  167. /*        //顯示第1位
  168.         led_table = LED_0F + LED[0];
  169.         i = *led_table;

  170.         LED_OUT(i);                        
  171.         LED_OUT(0x04);               

  172.         RCLK = 0;
  173.         RCLK = 1;
  174.         //顯示第2位
  175.         led_table = LED_0F + LED[1];
  176.         i = *led_table;

  177.         LED_OUT(i);               
  178.         LED_OUT(0x02);               

  179.         RCLK = 0;
  180.         RCLK = 1;
  181.         //顯示第3位
  182.         led_table = LED_0F + LED[2];
  183.         i = *led_table;

  184.         LED_OUT(i);                        
  185.         LED_OUT(0x01);        

  186.         RCLK = 0;
  187.         RCLK = 1;*/

  188. }

  189. void LED_OUT(uchar X)
  190. {
  191.         uchar i;
  192.         for(i=8;i>=1;i--)
  193.         {
  194.                 if (X&0x80) DIO=1; else DIO=0;
  195.                 X<<=1;
  196.                 SCLK = 0;
  197.                 SCLK = 1;
  198.         }
  199. }

  200. unsigned char code LED_0F[] =
  201. {// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
  202.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
  203. };



復制代碼


4位串行595數碼管顯示.zip

25.64 KB, 下載次數: 15

串口通信.zip

71.04 KB, 下載次數: 11

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区日本 | 在线观看www视频 | 亚洲一区二区免费视频 | av中文字幕在线播放 | 美女福利网站 | 久久精品国产一区老色匹 | 久久国内| 亚洲高清一区二区三区 | 国产精品久久久久久久粉嫩 | 国内精品视频在线观看 | 在线观看视频福利 | 国产精品美女久久久av超清 | 欧美福利视频 | 国内精品久久精品 | 男女在线网站 | 91国内视频在线 | 日韩天堂av| 久久精品欧美一区二区三区不卡 | 国产精品亚洲成在人线 | 黄色片在线网站 | 91就要激情| 国产精品日韩在线观看 | 亚洲成av人片在线观看 | 国产精品国色综合久久 | 欧美一区二区三区四区五区无卡码 | 99精品国产一区二区三区 | 成人自拍视频网站 | 国产在线观 | 欧美成年网站 | 中文字字幕一区二区三区四区五区 | 在线三级电影 | 亚洲精品成人 | 99国内精品 | 色视频网站免费 | 国产黄色电影 | 免费av观看 | 日韩精品一区二区三区在线播放 | av在线播放网站 | 国产一区二区在线视频 | 羞羞视频免费观看入口 | 精品无码久久久久久国产 |