|
剛?cè)腴TAVR單片機(jī)一段時(shí)間,感覺(jué)資料很少,所以進(jìn)度很慢,剛才百度到這里來(lái),現(xiàn)上傳一個(gè)數(shù)碼管的程序來(lái)和大家分享,高手就跳過(guò)吧,初學(xué)可以下載來(lái)做參考
proteus仿真原理圖:
單片機(jī)源程序:
- /*
- * smg8_avr.h
- *
- * Created: 2017/3/16 1:54:20
- * Author: lyl
- */
- #ifndef SMG8_AVR_H_
- #define SMG8_AVR_H_
- #include "lyl_avr.h"
- //數(shù)碼管端口定義
- #define smgPORT PORTA
- #define smgPORT_DDR DDRA
- #define DS PA5//串行數(shù)據(jù)輸入端口
- #define SHCP PA6//為移位寄存器的時(shí)鐘脈沖輸入口
- #define STCP PA7//為存儲(chǔ)寄存器的時(shí)鐘脈沖輸入口
- //OE為輸出使能端口,低電平有效,已直接接地
- void smgPortInit(void);//數(shù)碼管端口初始化
- void smg74HC595_WriteByte(uchar ucData); //向74HC595發(fā)送一個(gè)數(shù)據(jù)
- void smgDisplay(uchar bitCode,uchar segCode,uchar dp); //在數(shù)碼管的某一位上顯示某一個(gè)字符
- //共陽(yáng)數(shù)碼管的編碼,并將數(shù)據(jù)定義在CODE區(qū)
- const uchar SMG_SEG_CODE[18]={//共陽(yáng)數(shù)碼管的段碼編碼,并將數(shù)據(jù)定義在CODE區(qū)
- 0xc0,/*0*/
- 0xF9,/*1*/
- 0xA4,/*2*/
- 0xB0,/*3*/
- 0x99,/*4*/
- 0x92,/*5*/
- 0x82,/*6*/
- 0xF8,/*7*/
- 0x80,/*8*/
- 0x90,/*9*/
- 0x88,/*A=10*/
- 0x83,/*b=11*/
- 0xC6,/*C=12*/
- 0xA1,/*d=13*/
- 0x86,/*E=14*/
- 0x8E,/*F=15*/
- 0xFF,/*不顯示=16*/
- 0xBF,/*橫桿“-”=17*/
- };
- //數(shù)碼管的位選擇編碼
- const uchar SMG_BIT_CODE[10]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- #define SMG8_SetDS() setbit(smgPORT,DS)
- #define SMG8_ClrDS() clrbit(smgPORT,DS) //數(shù)據(jù)引腳
- #define smgSTCP_SET() setbit(smgPORT,STCP)
- #define smgSTCP_CLR() clrbit(smgPORT,STCP) //上升沿更新數(shù)據(jù)
- #define smgSHCP_SET() setbit(smgPORT,SHCP)
- #define smgSHCP_CLR() clrbit(smgPORT,SHCP) //上升沿移入數(shù)據(jù)
- #define smgDS_SET() setbit(smgPORT,DS)
- #define smgDS_CLR() clrbit(smgPORT,DS) //數(shù)據(jù)引腳
- /************************************************************************/
- /* 函數(shù)名稱:smgPortInit
- 函數(shù)功能:初始化8位共陽(yáng)數(shù)碼管的數(shù)據(jù)端口
- 入口參數(shù):無(wú)
- 返回值:無(wú) */
- /************************************************************************/
- void smgPortInit(void){
- smgPORT|=((1<<DS)|(1<<SHCP)|(1<<STCP));//初值為高電平
- smgPORT_DDR|=((1<<DS)|(1<<SHCP)|(1<<STCP));//數(shù)碼管端口設(shè)置為輸出模式
- }
- /************************************************************************/
- /*函數(shù)名稱:smg74HC595_WriteByte
- 函數(shù)功能:向74HC595發(fā)送一個(gè)字節(jié)數(shù)據(jù)
- 入口參數(shù):ucData-要發(fā)送的數(shù)據(jù)
- 返回值:無(wú) */
- /************************************************************************/
- void smg74HC595_WriteByte(uchar ucData){
- for(uchar i = 0 ;i < 8;i++){//高位在前低位在后
- if((ucData & (0x80>>i)) != 0) smgDS_SET(); else smgDS_CLR();
-
- smgSHCP_CLR();
- smgSHCP_SET();//SHCP引腳的上升沿移入數(shù)據(jù)
- _delay_us(10);
- }
- }
- /************************************************************************/
- /*函數(shù)名稱:smgDisplay
- 函數(shù)功能:在8位共陽(yáng)數(shù)碼管的指定位置上顯示一個(gè)字符
- 入口參數(shù):bitCode-位選擇碼,即選擇要在哪位數(shù)碼管上顯示數(shù)據(jù)
- :segCode-數(shù)據(jù)段碼選擇,即要顯示什么數(shù)據(jù)
- :dp-當(dāng)dp取值不等于0時(shí),數(shù)碼管將顯示后面的小圓點(diǎn)
- 返回值:無(wú) */
- /************************************************************************/
- void smgDisplay(uchar bitCode,uchar segCode,uchar dp){//在數(shù)碼管的某一位上顯示某一個(gè)字符
- uchar a;
- if(dp==0) a=0x00; else a=0x80;
- smg74HC595_WriteByte(SMG_BIT_CODE[bitCode]); //顯示在哪一個(gè)數(shù)碼管上
- smg74HC595_WriteByte(SMG_SEG_CODE[segCode]-a); //顯示的數(shù)據(jù)
- smgSTCP_CLR();
-
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
下載:
8位共陽(yáng)數(shù)碼管74HC595芯片AVR單片機(jī)控制.7z
(71.49 KB, 下載次數(shù): 43)
2017-5-4 22:25 上傳
點(diǎn)擊文件名下載附件
初學(xué)程序,高手跳過(guò)
|
|