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

QQ登錄

只需一步,快速開始

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

51單片機(jī) hc-05顯示數(shù)碼管 適合stc89c52rc

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:812531 發(fā)表于 2020-10-24 13:22 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0 //定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0 替換
unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
                                                   0x77,0x7c,0x39,0x5e,0x79,0x71};// 顯示段碼值0~F
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼
  sbit LATCH1=P2^6;//定義鎖存使能端口 段鎖存
sbit LATCH2=P2^7;//                 位鎖存
unsigned char TempData[8]; //存儲(chǔ)顯示值的全局變量
void Display(unsigned char FirstBit,unsigned char Num);//數(shù)碼管顯示函數(shù)
sbit FM=P2^3; //HJ-C52 P1.2 ?J5????
void Init_Timer0(void);//定時(shí)器初始化
void send_char();
unsigned char txd;
uchar buf,num,i,j;
void main (void)
{

SCON=0x50;   //設(shè)置為工作方式1
PCON=0x00;           //波特率不加倍
TMOD=0x20;           //設(shè)置計(jì)數(shù)器工作方式2
EA=1;                   //打開總中斷
ES=1;                         //打開接收中斷
TL1=0xfd;          //計(jì)數(shù)器初始值設(shè)置,注意波特率是9600的
TH1=0xfd;
TR1=1;

while (1)
{

Display(0,8);   //調(diào)用顯示函數(shù)
     TempData[i]=dofly_DuanMa[num];
            for(j=0;j<8;j++)//清屏
         {
         TempData[j]=0;
                 }
       }
   }


void Display(unsigned char FirstBit,unsigned char Num)
{
      static unsigned char i=0;
          

           DataPort=0;   //清空數(shù)據(jù),防止有交替重影
       LATCH1=1;     //段鎖存
       LATCH1=0;

       DataPort=dofly_WeiMa[i+FirstBit]; //取位碼
       LATCH2=1;     //位鎖存
       LATCH2=0;

       DataPort=TempData[i]; //取顯示數(shù)據(jù),段碼
       LATCH1=1;     //段鎖存
       LATCH1=0;

           i++;
       if(i==Num)
              i=0;


}
void serial() interrupt 4
{
ES=0;
        if(RI==1)         //RI  是串口接收中斷申請(qǐng)標(biāo)志位
        {
RI=0;                         //清除接收中斷標(biāo)志位
buf=SBUF; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
        send_char();  //調(diào)用

switch (buf)
{


case 0x31: P1=0xfe; FM=1 ;num=1;i++;break;
case 0x32: P1=0xfd; FM=1 ;num=2;i++;break;
case 0x33: P1=0xfb; FM=1 ;num=3;i++;break;
case 0x34: P1=0xf7; FM=1 ;num=4;i++;break;
case 0x35: P1=0xef; FM=1 ;num=5;i++;break;
case 0x36: P1=0xdf; FM=1 ;num=6;i++;break;
case 0x37: P1=0xbf; FM=1 ;num=7;i++;break;
}
ES=1;
       
}
        }
void send_char() //發(fā)送一個(gè)字符
{
        SBUF = buf;
        while(!TI);                  //等待發(fā)送數(shù)據(jù)完成
        TI = 0;                                 //清除發(fā)送完成標(biāo)志位
}

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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