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

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

QQ登錄

只需一步,快速開始

搜索
查看: 3795|回復(fù): 5
收起左側(cè)

單片機(jī)新人求助,串口接受數(shù)據(jù)在數(shù)碼管上顯示

[復(fù)制鏈接]
ID:715844 發(fā)表于 2020-3-25 23:00 | 顯示全部樓層 |閱讀模式
晶振為12MHz,串口通訊,工作方式為1,SMOD=1,波特率為4800,當(dāng)接收到一位數(shù)字的時(shí)候,在一個(gè)數(shù)碼管上顯示這個(gè)數(shù)字,如果不是一位數(shù)字,則在數(shù)碼管上顯示一個(gè)“點(diǎn)”符號(hào)。
實(shí)際結(jié)果是在串口中無論輸入任何值數(shù)碼管上顯示的都是點(diǎn)。求大神幫助!

單片機(jī)源程序如下:
  1. #include "reg52.h"
  2. #include "intrins.h"

  3. typedef unsigned char u8;
  4. typedef unsigned int u16;

  5. sbit signal_in_A = P2^2; //define the input pins for 74HC138
  6. sbit signal_in_B = P2^3;
  7. sbit signal_in_C = P2^4;

  8. u8 display_digit[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  9.         0x7f, 0x6f};  
  10. int received_data;

  11. void delay(u16 i)
  12. {
  13.         while(i--);
  14. }

  15. void dynamic_scan()
  16. {
  17.         u8 counter;
  18.         int is_digits;
  19.         is_digits = received_data / 10;

  20.         for(counter=0; counter<8; counter++)
  21.         {
  22.                 if(is_digits==0)
  23.                 {
  24.                         P0 = 0x5b;
  25.                         delay(100); // about 1s
  26.                         P0 = 0x00; // erase shadows
  27.                 }

  28.                 if(is_digits!=0)
  29.                 {
  30.                         P0 = 0x80;
  31.                         delay(100); // about 1s
  32.                         P0 = 0x00; // erase shadows
  33.                 }
  34.                 switch(counter)
  35.                 {
  36.                         case 0:
  37.                                 signal_in_A = 0; signal_in_B = 0; signal_in_C = 0;
  38.                                 break;
  39.                         case 1:
  40.                                 signal_in_A = 1; signal_in_B = 0; signal_in_C = 0;
  41.                                 break;
  42.                         case 2:
  43.                                 signal_in_A = 0; signal_in_B = 1; signal_in_C = 0;
  44.                                 break;
  45.                         case 3:
  46.                                 signal_in_A = 1; signal_in_B = 1; signal_in_C = 0;
  47.                                 break;
  48.                         case 4:
  49.                                 signal_in_A = 0; signal_in_B = 0; signal_in_C = 1;
  50.                                 break;
  51.                         case 5:
  52.                                 signal_in_A = 1; signal_in_B = 0; signal_in_C = 1;
  53.                                 break;
  54.                         case 6:
  55.                                 signal_in_A = 0; signal_in_B = 1; signal_in_C = 1;
  56.                                 break;
  57.                         case 7:
  58.                                 signal_in_A = 1; signal_in_B = 1; signal_in_C = 1;
  59.                                 break;
  60.                 }


  61.         }

  62. }

  63. void serial_init()
  64. {
  65.         TMOD = 0x20;
  66.         TH1 = 0xf3;
  67.         TL1 = 0xf3;
  68.         PCON = 0x80;
  69.         TR1 = 1;
  70.         SCON = 0x50;
  71.         ES = 1;
  72.         EA = 1;
  73. }

  74. void serial() interrupt 4
  75. {
  76.         received_data = SBUF;
  77.         RI = 0;
  78.         SBUF = received_data;
  79.         while(!TI); // wating for SBUF compeleting sending data
  80.         TI = 0;
  81. }

  82. void main()
  83. {
  84.         serial_init();
  85.         while(1)
  86.         {

  87.                 dynamic_scan();
  88.         }
  89. }
復(fù)制代碼



回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-3-26 06:11 | 顯示全部樓層
u8 received_data=10;//無符號(hào)字符型數(shù)據(jù),初值大于一位數(shù),顯示“.”。
void dynamic_scan()
{
        u8 counter;

        for(counter=0; counter<8; counter++)
        {
                P0=0x00;//消隱
                switch(counter)
                {
                        case 0:
                        signal_in_A = 0; signal_in_B = 0; signal_in_C = 0;
                        break;
                        case 1:
                        signal_in_A = 1; signal_in_B = 0; signal_in_C = 0;
                        break;
                        case 2:
                        signal_in_A = 0; signal_in_B = 1; signal_in_C = 0;
                        break;
                        case 3:
                        signal_in_A = 1; signal_in_B = 1; signal_in_C = 0;
                        break;
                        case 4:
                        signal_in_A = 0; signal_in_B = 0; signal_in_C = 1;
                        break;
                        case 5:
                        signal_in_A = 1; signal_in_B = 0; signal_in_C = 1;
                        break;
                        case 6:
                        signal_in_A = 0; signal_in_B = 1; signal_in_C = 1;
                        break;
                        case 7:
                        signal_in_A = 1; signal_in_B = 1; signal_in_C = 1;
                        break;
                }
                if(received_data>9) P0=0x80;//顯示“.”
                else P0=display_digit[received_data];//顯示范圍0~9
                delay(100);
        }
}
回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2020-3-26 08:48 | 顯示全部樓層
你原來的程序,輸入0~9,都顯示2,其它的顯示.,沒什么大問題。
我修改了一點(diǎn)點(diǎn),就可以達(dá)到你的目標(biāo)要求了:輸入0~9,就顯示輸入的那個(gè)數(shù)值,輸入其它的,都顯示.。
#include "reg52.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit signal_in_A = P2^2; //define the input pins for 74HC138
sbit signal_in_B = P2^3;
sbit signal_in_C = P2^4;

u8 display_digit[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
        0x7f, 0x6f};  
int received_data;

void delay(u16 i)
{
        while(i--);
}

void dynamic_scan()
{
        u8 counter;
        int is_digits;
        is_digits = received_data / 10;

        for(counter=0; counter<8; counter++)
        {
                if(is_digits==0)
                {
                        P0 = display_digit[received_data];//0x5b;
                        delay(100); // about 1s
                        P0 = 0x00; // erase shadows
                }

                if(is_digits!=0)
                {
                        P0 = 0x80;
                        delay(100); // about 1s
                        P0 = 0x00; // erase shadows
                }
                switch(counter)
                {
                        case 0:
                                signal_in_A = 0; signal_in_B = 0; signal_in_C = 0;
                                break;
                        case 1:
                                signal_in_A = 1; signal_in_B = 0; signal_in_C = 0;
                                break;
                        case 2:
                                signal_in_A = 0; signal_in_B = 1; signal_in_C = 0;
                                break;
                        case 3:
                                signal_in_A = 1; signal_in_B = 1; signal_in_C = 0;
                                break;
                        case 4:
                                signal_in_A = 0; signal_in_B = 0; signal_in_C = 1;
                                break;
                        case 5:
                                signal_in_A = 1; signal_in_B = 0; signal_in_C = 1;
                                break;
                        case 6:
                                signal_in_A = 0; signal_in_B = 1; signal_in_C = 1;
                                break;
                        case 7:
                                signal_in_A = 1; signal_in_B = 1; signal_in_C = 1;
                                break;
                }


        }

}

void serial_init()
{
        TMOD = 0x20;
        TH1 = 0xf3;
        TL1 = 0xf3;
        PCON = 0x80;
        TR1 = 1;
        SCON = 0x50;
        ES = 1;
        EA = 1;
}

void serial() interrupt 4
{
        received_data = SBUF;
        RI = 0;
        SBUF = received_data;
        while(!TI); // wating for SBUF compeleting sending data
        TI = 0;
}

void main()
{
        serial_init();
        while(1)
        {

                dynamic_scan();
        }
}

我在我的HC6800-ES-V2.0板子上通過,用的STC-ISP下載軟件中的串口功能就可以得到正確結(jié)果
回復(fù)

使用道具 舉報(bào)

ID:715844 發(fā)表于 2020-3-26 17:45 | 顯示全部樓層
wulin 發(fā)表于 2020-3-26 06:11
u8 received_data=10;//無符號(hào)字符型數(shù)據(jù),初值大于一位數(shù),顯示“.”。
void dynamic_scan()
{

謝謝回復(fù),但修改之后仍然是在串口中輸入任何數(shù)字都在數(shù)碼管上顯示了點(diǎn)。
回復(fù)

使用道具 舉報(bào)

ID:715844 發(fā)表于 2020-3-26 17:47 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2020-3-26 08:48
你原來的程序,輸入0~9,都顯示2,其它的顯示.,沒什么大問題。
我修改了一點(diǎn)點(diǎn),就可以達(dá)到你的目標(biāo)要求 ...

謝謝回復(fù),是我發(fā)帖的時(shí)候復(fù)制粘貼沒有注意,我原來是跟你寫的一樣的,但是我燒錄了之后還是在串口輸入任何值數(shù)碼管上都是點(diǎn)。
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-3-26 20:15 | 顯示全部樓層
paradox666 發(fā)表于 2020-3-26 17:45
謝謝回復(fù),但修改之后仍然是在串口中輸入任何數(shù)字都在數(shù)碼管上顯示了點(diǎn)。

無標(biāo)題.jpg 把串口暫時(shí)關(guān)閉,單試顯示重新,正常后再開串口。

  1. #include "reg52.h"
  2. #include "intrins.h"

  3. typedef unsigned char u8;
  4. typedef unsigned int u16;

  5. sbit signal_in_A = P2^2; //define the input pins for 74HC138
  6. sbit signal_in_B = P2^3;
  7. sbit signal_in_C = P2^4;

  8. u8 display_digit[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  9.         0x7f, 0x6f};  
  10. u8 received_data=10;

  11. void delay(u16 i)
  12. {
  13.         while(i--);
  14. }

  15. void dynamic_scan()
  16. {
  17.         u8 counter;
  18.         for(counter=3; counter<11; counter++)
  19.         {
  20.                 P0=0x00;//消隱
  21.                 switch(counter)
  22.                 {
  23.                         case 3:
  24.                         signal_in_A = 0; signal_in_B = 0; signal_in_C = 0;
  25.                         break;
  26.                         case 4:
  27.                         signal_in_A = 1; signal_in_B = 0; signal_in_C = 0;
  28.                         break;
  29.                         case 5:
  30.                         signal_in_A = 0; signal_in_B = 1; signal_in_C = 0;
  31.                         break;
  32.                         case 6:
  33.                         signal_in_A = 1; signal_in_B = 1; signal_in_C = 0;
  34.                         break;
  35.                         case 7:
  36.                         signal_in_A = 0; signal_in_B = 0; signal_in_C = 1;
  37.                         break;
  38.                         case 8:
  39.                         signal_in_A = 1; signal_in_B = 0; signal_in_C = 1;
  40.                         break;
  41.                         case 9:
  42.                         signal_in_A = 0; signal_in_B = 1; signal_in_C = 1;
  43.                         break;
  44.                         case 10:
  45.                         signal_in_A = 1; signal_in_B = 1; signal_in_C = 1;
  46.                         break;
  47.                 }
  48. //                if(received_data>9) P0=0x80;//顯示“.”
  49. //                else P0=display_digit[received_data];//顯示范圍0~9
  50.                 if(counter>9) P0=0x80;//顯示“.”
  51.                 else P0=display_digit[counter];//顯示范圍3~9
  52.                 delay(100);
  53.         }
  54. }
  55. /*
  56. void serial_init()
  57. {
  58.         TMOD = 0x20;
  59.         TH1 = 0xf3;
  60.         TL1 = 0xf3;
  61.         PCON = 0x80;
  62.         TR1 = 1;
  63.         SCON = 0x50;
  64.         ES = 1;
  65.         EA = 1;
  66. }

  67. void serial() interrupt 4
  68. {
  69.         received_data = SBUF;
  70.         RI = 0;
  71.         SBUF = received_data;
  72.         while(!TI); // wating for SBUF compeleting sending data
  73.         TI = 0;
  74. }
  75. */
  76. void main()
  77. {
  78. //        serial_init();
  79.         while(1)
  80.         {
  81.                 dynamic_scan();
  82.         }
  83. }
復(fù)制代碼




回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: jlzzjlzz国产精品久久 | 精品毛片 | 日韩毛片免费视频 | 精品一区二区av | 中文一区| 成人蜜桃av | 久草网在线视频 | 天天综合国产 | 亚洲精品色 | 免费成人高清在线视频 | 久久99网站| 日本天堂一区 | 久久久精品一区二区三区 | 国产91在线播放 | 亚洲精品电影 | 韩日一区| 欧美综合在线视频 | 99久久久久久久久 | 午夜精品一区二区三区免费视频 | 欧美精品网站 | 中文字幕精品一区二区三区在线 | 亚洲成av人片在线观看无码 | 欧美日韩在线一区二区三区 | 欧美日韩亚洲视频 | 超碰av在线 | 久久久久久亚洲精品 | 久久精品国产亚洲夜色av网站 | 中文字幕乱码一区二区三区 | 超碰在线观看97 | 日本不卡一区 | 日韩久久久久久 | 99久久婷婷国产亚洲终合精品 | 久久男女视频 | 天天操妹子 | 日韩在线免费观看视频 | 国产精品伦一区二区三级视频 | 一区二区三区免费观看 | 羞羞在线视频 | 国产在线观看网站 | a在线视频观看 | 国产精品美女一区二区三区 |