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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

想通過串口輸入數字 在數碼管上顯示出來,不知道為什么數碼管顯示的是各種筆畫而不...

[復制鏈接]
跳轉到指定樓層
樓主
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能                   :設置串口
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
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
* 函數功能                  : 串口通信中斷函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
unsigned char receiveData;
void Usart() interrupt 4
{
        P0=SBUF;//出去接收到的數據
        RI = 0;//清除接收中斷標志位
        LSA=0;LSB=0;LSC=0;
    while(!TI);                         //等待發送數據完成
        P0=0x00;//消隱
        TI=0;                                                 //清除發送完成標志位
}

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

使用道具 舉報

沙發
ID:94031 發表于 2018-10-21 17:37 | 只看該作者
得到要顯示的數,還要譯碼成數碼管相應的碼值,才能送到段碼P0口。

評分

參與人數 1黑幣 +5 收起 理由
873119779 + 5 贊一個!

查看全部評分

回復

使用道具 舉報

板凳
ID:413214 發表于 2018-10-21 18:44 | 只看該作者
74LS245
回復

使用道具 舉報

地板
ID:213173 發表于 2018-10-21 18:52 | 只看該作者
要譯碼成數碼管相應的碼值,稍微改動簡單示例一下。
#include "reg52.h"  
/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能                   :設置串口
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char receiveData;
unsigned char code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
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();  //        串口初始化
        LSA=0;LSB=0;LSC=0;
        P0=0x00;
        while(1);               
}

/*******************************************************************************
* 函數名         : Usart() interrupt 4
* 函數功能                  : 串口通信中斷函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void Usart() interrupt 4
{
        RI = 0;//清除接收中斷標志位
        receiveData=SBUF;//保存收到的數據
        P0=table[receiveData%10];//顯示收到的個位數
        SBUF=receiveData;//發送收到的數據
        while(!TI);   //等待發送數據完成
        TI=0;          //清除發送完成標志位
}

評分

參與人數 1黑幣 +8 收起 理由
873119779 + 8 很給力!

查看全部評分

回復

使用道具 舉報

5#
ID:413292 發表于 2018-10-21 21:13 | 只看該作者
想寫點單片機程序不知道怎么寫
回復

使用道具 舉報

6#
ID:213173 發表于 2018-10-26 07:32 | 只看該作者
#include "reg52.h"  //此文件中定義了單片機的一些特殊功能寄存器
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80};//顯示0~F.的值

unsigned char x[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','.'};
unsigned char a[5];
unsigned char i,j;
//unsigned int i,m,j,l;
unsigned char SendByte;
bit flag=0;
/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能       :設置串口
* 輸入           : 無
* 輸出           : 無
*******************************************************************************/
void UsartInit()                //9600bps@11.0592MHz
{
        SCON = 0x50;                //8位數據,可變波特率
        TMOD = 0x20;                //設定定時器1為8位自動重裝方式
        TL1  = 0xFD;                //設定定時初值
        TH1  = 0xFD;                //設定定時器重裝值
        ET1  = 0;                   //禁止定時器1中斷
        TR1  = 1;                   //啟動定時器1
        EA=1;                                        //開總中斷
        ES=1;                                        //開串口中斷
}
void delay(unsigned int u)
{
   while(u--);
}
/*******************************************************************************
* 函 數 名       : main
* 函數功能       : 主函數
* 輸    入       : 無
* 輸    出       : 無
*******************************************************************************/
void main()
{        
        UsartInit();  //串口初始化
        while(1)
        {
                for(i=0;i<5;i++)
                {
                        switch(i)         //位選,選擇點亮的數碼管,
                        {
                                case(0):
                                LSA=0;LSB=0;LSC=0; break;//顯示第0位
                                case(1):
                                LSA=1;LSB=0;LSC=0; break;//顯示第1位
                                case(2):
                                LSA=0;LSB=1;LSC=0; break;//顯示第2位
                                case(3):
                                LSA=1;LSB=1;LSC=0; break;//顯示第3位
                                case(4):
                                LSA=0;LSB=0;LSC=1; break;//顯示第4位
                        }
                        P0=smgduan[a[i]];//送段碼顯示
                        delay(100); //間隔一段時間掃描        
                        P0=0x00;//消隱
                }               
        }               
}

/*******************************************************************************
* 函數名         : Usart() interrupt 4
* 函數功能       : 串口通信中斷函數
* 輸入           : 無
* 輸出           : 無
*******************************************************************************/
void Usart() interrupt 4
{        
        static unsigned char num=0;        //靜態計數變量
        RI=0;                                                //接收中斷請求標志位清0
        a[num]=SBUF;                        //接收到的數據串保存在緩存數組
        num++;
        if(num>=5)
        {
                flag=1;                                //接收完成標志置1
                num=0;                                //計數變量清0
        }
        if(flag==1)                //接收完成標志為1
        {
                flag=0;                //接收完成標志清0
                for(j=0;j<5;j++)
                {
                        SBUF=a[j];        //發送數據緩存中保存的數據
                        while(!TI);        //等待發送中斷請求標志位為1
                        TI=0;                //發送中斷請求標志位清0
                }
        }       
}
回復

使用道具 舉報

7#
ID:319023 發表于 2018-10-26 13:59 | 只看該作者
數碼管顯示的數和硬件連接、共陰還是共陽極都有關系,驅動代碼不能只簡單移植。 可以把7段顯示數碼管每段單獨點亮,再嘗試用數碼管顯示數據,到時只要改變下發送數據緩存中保存的數據就可以正常顯示了。
回復

使用道具 舉報

8#
ID:213173 發表于 2018-10-29 10:38 | 只看該作者



回復

使用道具 舉報

9#
ID:399491 發表于 2018-10-29 12:24 | 只看該作者

那請問小數點該怎么發送呢? 發送數字可以做得到了
回復

使用道具 舉報

10#
ID:213173 發表于 2018-10-29 14:55 | 只看該作者
873119779 發表于 2018-10-29 12:24
那請問小數點該怎么發送呢? 發送數字可以做得到了

小數點在這里是文本,不是數字,不能與數字混在一起傳輸,只能用其代碼與數字混在一起傳輸。



回復

使用道具 舉報

11#
ID:213173 發表于 2018-10-29 15:19 | 只看該作者
873119779 發表于 2018-10-29 12:24
那請問小數點該怎么發送呢? 發送數字可以做得到了

如果非得用文本方式傳輸數據并用數碼管正確顯示就得創建一個二維數組來完成譯碼。這會導致編程復雜。LCD可以直接輸入ASCII碼顯示是其內置有譯碼模塊。
回復

使用道具 舉報

12#
ID:417405 發表于 2018-10-29 17:22 | 只看該作者
學習了
回復

使用道具 舉報

13#
ID:71883 發表于 2019-8-14 10:13 | 只看該作者
大家說的非常有用
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品亚洲一区二区三区 | 精久久久| 国产成人jvid在线播放 | 五月天婷婷综合 | 久久久久无码国产精品一区 | 成人av一区二区在线观看 | 欧美成人一区二区三区 | 美女国内精品自产拍在线播放 | 国产精品 欧美精品 | 欧美a在线观看 | 欧美一级在线观看 | 欧美精品一区免费 | 自拍偷拍精品 | 国产精品久久久久国产a级 欧美日韩国产免费 | av黄色在线 | 日本字幕在线观看 | 欧美一区二区免费电影 | 四虎影院欧美 | 黄色网址免费在线观看 | 午夜免费观看网站 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 亚洲一区二区在线免费观看 | 久精品久久 | 欧美国产中文字幕 | 久久久久免费精品国产 | 天天视频一区二区三区 | av喷水| 久久精品99国产精品 | 国产精品日日摸夜夜添夜夜av | 免费在线观看毛片 | 午夜精品久久久久久久久久久久 | 九九免费在线视频 | 91精品一区二区三区久久久久久 | 玖玖爱365 | 午夜久久久| 成人在线一区二区 | 国内久久| 久久草视频 | 国产成人精品网站 | 成人精品久久 | 91看片免费版 |