日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5、数码管驱动使用

發布時間:2024/3/26 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5、数码管驱动使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、判斷現在手里頭買的是共陰還是共陽數碼管

我們可使用萬用表進行最簡單判斷,將萬用表調到二極管檔,

(1)萬用表筆隨便一腳,假設紅筆, 搭在數碼管上任一腳 。黑筆在其它腳上掃過,如果不亮,有可能此管為共陰,可用2法再試。如有一段點亮。黑筆不動, 移動紅筆,在其它腳測。如果其它腳 分別都 能點亮,則可以說明黑筆接的是公共腳 ,此管共陽。(指針 表的黑表筆是正電源)

(2)表筆更換一下,黑筆先搭一腳,掃紅筆。如有一段點亮,紅筆不動,掃黑筆。如各段分別點亮,則紅筆所接為公共 ,此管共陰

二、段選與位選

多位一體數碼管,內部的公告端是獨立的,我們把公共端叫做位選線

負責顯示什么數字的線全部都是連接在一起,我們把這個叫做段選線

三、現在使用大部分都直接使用驅動芯片了,所以我們重點來講驅動芯片的使用

網上搜一搜 ,比如tm1650就是一個8*4驅動,可以驅動4位數碼管,采用的IIC通訊

當時開發用的中微的芯片,所以在此我就拿中微的CMS1650來寫,其實他跟TM1650都是一樣的,數碼管驅動芯片大同小異,掌握一款其他就都會了。

三、CMS1650

1、概述

方便使用,電路設計便捷,工作電壓又低,堪稱完美

2、管腳

管腳分布圖DIG就是位選,其他就是段選

3、通訊協議

通訊協議采用的是IIC通訊協議。我們可以看看規格書,規格書我上傳了。

(1)先來看看規格書寫的協議的開始的信號與停止信號

啟始信號,在SCL為高電平期間,SDA出現下降沿現象;

考慮代碼整潔性,我們可以先進行宏定義

#define CLS_CMS_SCL ? P0_4 = 0 ? //時鐘拉低
#define SET_CMS_SCL ? P0_4 = 1 ? //時鐘拉高?
#define SET_CMS_SDA ? P0_5 = 1 ? //數據拉低
#define CLS_CMS_SDA ? P0_5 = 0 ? //數據拉高

#define CLK ? ? ? ? ? P0_4 ?
#define SDA ? ? ? ? ? P0_5 ?

#define SDA_OUT() ? ? {P0TRIS |= 0x20;P0 |= 0x20; }?
#define SDA_INT() ? ? {P0TRIS &= 0xDF;P0UP |=0x20;}

void LED_Init(void)
{
? P0TRIS |= 0x10; //設置P04輸出 SCL
?? ?P0 |= 0x10; ? ? //輸出高?? ?
?
?? ?P0TRIS |= 0x20; //設置P05輸出 SDA
?? ?P0 |= 0x20; ? ? //輸出高
}

void CMS1650_Start(void) //SCL 為“1”,SDA 從“1”跳“0”,認為是開始信號
{?
?? ?SDA_OUT();//設置/SCL、SDA?為輸出腳
?? ?SET_CMS_SCL;
?? ?SET_CMS_SDA;
?? ?delay_us(5);
?? ?CLS_CMS_SDA;
?? ?delay_us(5);
?? ?CLS_CMS_SCL;//鉗住I2C總線,準備發送或接收數據,(IIC規定只有在SCL為低電平期間,數據線上才允許高低變化,所以開始信號啟動后,拉低SCL)
}

void CMS1650_Stop(void) // SCL 為“1”電平,SDA 從“0”跳“1”,認為是結束信號
{?
?? ?SDA_OUT();
?? ?SET_CMS_SCL;
?? ?CLS_CMS_SDA;
?? ?delay_us(5);
?? ?SET_CMS_SDA;
?? ?delay_us(5);//停止信號,就不用把SCL拉低
}

(2)應答信號

應答信號由接收設備產生,在SCL為高電平期間,接收設備將SDA拉低說明數據傳輸正確,產生應答。

所以我們代碼應該這樣寫,傳輸完數據后,得先釋放數據線;再將SCL拉高,判斷低電平是否到來。

//等待從機應答信號到來
//返回值:1,接收應答失敗
//? ? ? ? ? ? ? 0,接收應答成功
u8 CMS1650_Wait_Ack(void)
{
?? ?u16?time = 0;
??? ?SDA_INT();//將SDA設置為上拉輸入 ,主機釋放數據總線(總線在空閑狀態為高電平)等待從機產生應答信號?? ? ??

? ? delay_us(5);??
?? ?SET_CMS_SCL;//? ?SCL拉高
?? ?while(SDA == 1)//在while循環延時這段時間內,看叢機是否有產生應答信號,有的話SDA就=0,跳出循環
?? ?{
?? ??? ?time++;
?? ??? ?if(time>255)//從機沒應答,傳輸失敗
?? ??? ?{
?? ??? ??? ?CMS1650_Stop();
?? ??? ??? ?return 1; //有必要的話顯示或者產生個中斷說明傳輸失敗,跳出循環。注:return可以可以跳出while循環

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? continue:不跳出當前循環,結束本次循環(結束當前循環),執行下一輪循環
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break:跳出當前循環,結束該循環執行
?? ??? ?}
?? ?}
?? ?CLS_CMS_SCL;
?? ?return 0; ?
}

(3)寫入數據

void CMS1650_SendByte(u8 txd)
{
? u8 t = 0; ??
//?? SDA_OUT();
// ?CLS_CMS_SCL;//拉低時鐘開始數據傳輸?? ?,開始信號已經拉低SCL了,這里可以不用寫了
? ?for(t=0;t<8;t++)
? ?{ ??
?? ??? ??? ?if((txd&0x80)>>7)
?? ??? ??? ??? ?SET_CMS_SDA;
?? ??? ??? ?else
?? ??? ??? ??? ?CLS_CMS_SDA;
?? ??? ??? ?txd<<=1;?
?? ??? ??? ?delay_us(5);?
?? ??? ??? ?SET_CMS_SCL;//數據發送完,拉高時鐘
?? ??? ??? ?delay_us(5);?
? ? ? ? ? ? CLS_CMS_SCL;//拉低時鐘開始數據傳輸?? ?
?? ??? ??? ?delay_us(5);
?? ? }
}

對于數據的寫入為啥要SCL 從“0”跳到“1”,再從“1”跳到“0”這么寫,我們來看看接收方是怎么接收就一目了然了;

從設備收數據:主設備發送了開始位后,把clk拉低,只有clk拉低,sda才可以做高低變化; 當clk被拉高時,(0->1)從設備就會去讀取sda的高低電平值;clk再次被拉低時,(1->0)從設備認為此位已讀取完畢,認為是有效位,等待clk再次拉高,讀取下一位。

(4)一個完整的寫顯示時序

首先得先寫入數據命令,然后開顯示確定顯示的亮度

8段顯示的話就是小數點也顯示出來

再來確定顯存地址(確定位選地址)

最后

void main()
{

? u8 t = 0;

?? ?LED_Init(); //SCL SDA?設置為輸出

? ?delay_ms(300);?? ?//延時一段時間,否則開顯示無響應

? ?CMS1650_SendByte(0x48);

? ?CMS1650_Wait_Ack();//等待應答

?//這里應答處理,看大家要做什么處理,這里應答處理我就先不作處理

?? CMS1650_SendByte(0x30);//開顯示:3級亮度

?? ?CMS1650_Wait_Ack();//等待應答?? ?
?? ?CMS1650_Stop();

?? ?CMS1650_WriteByte(0x6E,0x7f);
?? ?CMS1650_WriteByte(0x6C,0x7f);
?? ?CMS1650_WriteByte(0x6A,0x7f);
?? ?CMS1650_WriteByte(0x68,0x7f);//開機8888

?//單片機上電數碼管顯示8.8.8.8.

}

全部代碼

void LED_Init(void)
{
? P0TRIS |= 0x10; //設置P04輸出 SCL
?? ?P0 |= 0x10; ? ? //輸出高?? ?
?
?? ?P0TRIS |= 0x20; //設置P05輸出 SDA
?? ?P0 |= 0x20; ? ? //輸出高
}
void CMS1650_Start(void) //SCL 為“1”,SDA 從“1”跳“0”,認為是開始信號
{?
?? ?SDA_OUT();
?? ?SET_CMS_SCL;
?? ?SET_CMS_SDA;
?? ?delay_us(5);
?? ?CLS_CMS_SDA;
?? ?delay_us(5);
?? ?CLS_CMS_SCL;//鉗住I2C總線,準備發送或接收數據
}
void CMS1650_Stop(void) // SCL 為“1”電平,SDA 從“0”跳“1”,認為是結束信號
{?
?? ?SDA_OUT();
?? ?SET_CMS_SCL;
?? ?CLS_CMS_SDA;
?? ?delay_us(5);
?? ?SET_CMS_SDA;
?? ?delay_us(5);
}

//等待從機應答信號到來
//返回值:1,接收應答失敗
// ? ? ? ?0,接收應答成功
u8 CMS1650_Wait_Ack(void)
{
?? ?u16 time = 0;
?? ?SDA_OUT();
?? ?SET_CMS_SDA;delay_us(1);//主機釋放數據總線,(總線在空閑狀態為高電平)等待從機產生應答信號?? ? ??
?? ?SET_CMS_SCL;delay_us(1);?? ??
?? ?SDA_INT();//將SDA設置為上拉輸入
?? ?while(SDA == 1)//在while循環延時這段時間內,看叢機是否有產生應答信號,有的話SDA就=0,跳出循環
?? ?{
?? ??? ?time++;
?? ??? ?if(time>255)//從機沒應答,傳輸失敗
?? ??? ?{
?? ??? ??? ?CMS1650_Stop();
?? ??? ??? ?return 1; //有必要的話顯示或者產生個中斷說明傳輸失敗
?? ??? ?}
?? ?}
?? ?CLS_CMS_SCL;
?? ?return 0; ?
}

void CMS1650_SendByte(u8 txd)
{
? u8 t = 0; ??
//?? ?SDA_OUT();
// ?CLS_CMS_SCL;//拉低時鐘開始數據傳輸?? ?,開始信號已經拉低SCL了,這里可以不用寫了
? ?for(t=0;t<8;t++)
? ?{ ??
?? ??? ??? ?if((txd&0x80)>>7)
?? ??? ??? ??? ?SET_CMS_SDA;
?? ??? ??? ?else
?? ??? ??? ??? ?CLS_CMS_SDA;
?? ??? ??? ?txd<<=1;?
?? ??? ??? ?delay_us(5);?
?? ??? ??? ?SET_CMS_SCL;//數據發送完,拉高時鐘
?? ??? ??? ?delay_us(5);?
? ? ? ? ? ?CLS_CMS_SCL;//拉低時鐘開始數據傳輸?? ?
?? ??? ??? ?delay_us(5);
?? ? }
}

void CMS1650_WriteByte(u8 Addr,u8 Data)
{
?? ?CMS1650_Start();
?? ?CMS1650_SendByte(Addr);
?? ?CMS1650_Wait_Ack();//等待應答
?? ?CMS1650_SendByte(Data);
?? ?CMS1650_Wait_Ack();//等待應答?? ?
?? ?CMS1650_Stop();
}

總結

以上是生活随笔為你收集整理的5、数码管驱动使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美手机看片 | 中文在线观看免费 | a在线视频 | 伦av综合一区| 婷婷丁香激情五月 | 91精品免费观看 | 欧美人与性禽动交精品 | 91免费看| 美妇湿透娇羞紧窄迎合 | 国产制服在线 | 欧美三级在线看 | 男人肌肌桶女人肌肌 | 正在播放国产一区 | 国产男男gay体育生白袜 | 自拍视频在线播放 | 91看片免费看 | 国产美女视频 | 欧美一区二区三区四区五区六区 | 天天色综合色 | 欧美午夜精品理论片a级按摩 | 欧美精品一区二区蜜桃 | jizzjizz在线播放 | 亚洲免费色视频 | 亚洲精品久久久久久久蜜桃臀 | 欧美一级性片 | 国产成a人亚洲精v品在线观看 | 综合国产在线 | 亚洲福利一区 | 黄网在线免费 | 久久久久久久综合 | 亚洲国产精品suv | 国产精品亚洲欧美在线播放 | 97在线观看视频 | 中文字幕av久久爽一区 | 91九色在线| 中文字幕在线视频一区 | 亚洲成人av综合 | 亚洲av无码一区二区乱子仑 | 三级国产网站 | 亚洲视频999 | 国产日韩欧美在线 | 色综合久久精品亚洲国产 | 黄色一级片av | 91中文在线观看 | 亚洲综合自拍 | 亚州av一区 | 中文字幕激情视频 | 亚洲激情欧美色图 | 免费观看a级片 | 久久性片| 99在线免费观看视频 | 久热国产在线 | 男人视频网 | 日韩不卡在线观看 | 成年人一级黄色片 | 中文字幕一区二区三区在线视频 | 亚洲乱码一区二区三区在线观看 | 免费亚洲婷婷 | 黄色一级黄色片 | 无码 制服 丝袜 国产 另类 | 国产黄色免费视频 | 人人干人人看 | 色播五月激情五月 | 青青青青青草 | 干美女视频 | 二区在线观看 | 日韩一区二区视频 | 爆操女秘书 | 欧美混交群体交 | 欧美123区| 久久极品视频 | 伊人精品国产 | 国产免费av一区 | 一卡二卡在线视频 | 亚洲男女一区二区三区 | 久久夜夜操 | 国产婷婷在线视频 | 色小说香蕉 | 永久免费在线观看av | 激情成人av | 日日操日日干 | 污视频网站在线播放 | 欧美人与禽zozzo性之恋的特点 | 一区二区三区高清 | 国产精品久久久久久久久久久久午夜片 | 国产aaa| 欧美中文字幕在线视频 | 亚洲人视频在线观看 | 九一在线观看免费高清视频 | 日本一区二区黄色 | 国产第三区 | 精品成人一区二区三区久久精品 | 九九热精品 | 成人深夜视频在线观看 | 亚洲中文字幕97久久精品少妇 | 国产九九九九九 | 国产女主播喷水视频在线观看 | 在线中文字幕第一页 | 日韩女优一区二区 |