?? led8disp.lis
字號:
.module LED8Disp.c
.area text(rom, con, rel)
0000 .dbfile F:\job\M16學(xué)習(xí)板\LED數(shù)碼管程序(實驗四)\LED8Disp.c
0000 .dbfile F:\job\M16學(xué)習(xí)板\LED數(shù)碼管程序(實驗四)\..\ICC_H\SOFTWARE.h
0000 .dbfunc e ChangeIntToHex _ChangeIntToHex fV
0000 ; dec -> R20,R21
.even
0000 _ChangeIntToHex::
0000 0E940000 xcall push_gset1
0004 A801 movw R20,R16
0006 .dbline -1
0006 .dbline 136
0006 ; /*******************************************************************
0006 ; 實驗四
0006 ; 實驗名稱: SPI接口實險,LED數(shù)據(jù)管顯示。
0006 ; 實驗?zāi)康? 學(xué)習(xí)AVR單片機(jī)的SPI功能
0006 ; 實驗現(xiàn)象: 1、程序通過SPI接口輸出數(shù)據(jù)到HC595芯片驅(qū)動LED數(shù)據(jù)管簡單顯示。
0006 ; 2、內(nèi)部1 M晶振,程序采用單任務(wù)方式,軟件延時。
0006 ; 環(huán) 境: ICCAVR6.31A
0006 ; 設(shè) 計 者: shinea8868
0006 ; 說 明: 部分程序原型源自網(wǎng)絡(luò),經(jīng)本人修改調(diào)試可用,請尊重知識產(chǎn)權(quán),如
0006 ; 作商業(yè)用途請保留本段文字
0006 ; 完成日期: 2007年4月9日
0006 ; *******************************************************************/
0006 ; #include "iom16v.h"
0006 ; #include "macros.h"
0006 ; #include "..\ICC_H\SOFTWARE.h"
0006 ;
0006 ; unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
0006 ;
0006 ; /*-----------------------------------------------------------------
0006 ; 延時程序計算方法
0006 ; 計數(shù)個數(shù)j = 延時時間/6*晶振頻率 - 1
0006 ; 函數(shù)名稱: void DelayMs(uchar i)
0006 ; 函數(shù)功能: 毫秒延時
0006 ; 參 數(shù):
0006 ; 返 回 值: 無
0006 ; -----------------------------------------------------------------*/
0006 ; void DelayMs(uchar i)
0006 ; {
0006 ; uchar j;
0006 ; while(i--)
0006 ; {
0006 ; j = 167;//1mhz 1ms延時
0006 ; while(j--);
0006 ; }
0006 ; }
0006 ;
0006 ; /*-----------------------------------------------------------------
0006 ; 函數(shù)名稱: void SPIMasterInit(void)
0006 ; 函數(shù)功能: SPI初始化為主機(jī)
0006 ; 參 數(shù):
0006 ; 返 回 值: 無
0006 ; -----------------------------------------------------------------*/
0006 ; void SPIMasterInit(void)
0006 ; {
0006 ; // MOSI,MISO,SCK等都需要設(shè)計的數(shù)據(jù)方向定義
0006 ; DDRB |= (1<<PB5) | (1<<PB7); // 設(shè)置MOSI 和SCK 為輸出,其他為輸入 M16
0006 ; // DDRB |= (1<<PB2) | (1<<PB3); // 設(shè)置MOSI 和SCK 為輸出,其他為輸入 M64
0006 ; // SPI控制寄存器
0006 ; // SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
0006 ; // SPIE 中斷使能 SPE SPI使能 DORD 數(shù)據(jù)次序 1為LSB首先發(fā)送,0為MSB首先發(fā)送
0006 ; // MSTR 主從選擇 1為主,0為從MSTR置位時選擇主機(jī)模式,否則為從機(jī).如果MSTR為"1",
0006 ; // SS配置為輸入,但被拉低,則MSTR 被清零,寄存器SPSR 的SPIF 置位.用戶必須重新設(shè)置
0006 ; // MSTR 進(jìn)入主機(jī)模式。
0006 ; // CPOL: 時鐘極性見ATMEGA16L(中文)P130
0006 ; // CPHA: 時鐘相位
0006 ; // SPR1, SPR0: SPI 時鐘速率選擇1 與0 SPR1 和SPR0 對從機(jī)沒有影響。
0006 ; // 使能SPI 主機(jī)模式,設(shè)置時鐘速率為fck/128 */
0006 ; SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (1<<SPR0);
0006 ; }
0006 ; /*-----------------------------------------------------------------
0006 ; 函數(shù)名稱: void SPIMasterTransmit(unsigned char i)
0006 ; 函數(shù)功能: SPI數(shù)據(jù)發(fā)送
0006 ; 參 數(shù):
0006 ; 返 回 值: 無
0006 ; -----------------------------------------------------------------*/
0006 ; void SPIMasterTransmit(uchar TranData)
0006 ; {
0006 ; SPDR = TranData; // 啟動數(shù)據(jù)傳輸
0006 ; while (!(SPSR & (1<<SPIF))); // 等待傳輸結(jié)束
0006 ; }
0006 ; /*-----------------------------------------------------------------
0006 ; 函數(shù)名稱: void SPISlaveInit(void)
0006 ; 函數(shù)功能: SPI初始化為從機(jī)
0006 ; 參 數(shù):
0006 ; 返 回 值: 無
0006 ; -----------------------------------------------------------------/
0006 ; void SPISlaveInit(void)
0006 ; {
0006 ; DDR_SPI = (1<<DD_MISO); // 設(shè)置MISO 為輸出,其他為輸入
0006 ; SPCR = (1<<SPE);// 使能 SPI
0006 ; }
0006 ; /*-----------------------------------------------------------------
0006 ; 函數(shù)名稱: SPISlaveReceive(uchar & RecvData)
0006 ; 函數(shù)功能: SPI從機(jī)接收數(shù)據(jù)
0006 ; 參 數(shù):
0006 ; 返 回 值: 無
0006 ; -----------------------------------------------------------------
0006 ; void SPISlaveReceive(uchar & RecvData)
0006 ; {
0006 ; while(!(SPSR & (1<<SPIF)));// 等待接收結(jié)束
0006 ; RecvData = SPDR;//返回接收到的數(shù)據(jù)
0006 ; }*/
0006 ; /*-----------------------------------------------------------------
0006 ; 函數(shù)名稱: void SPI595Out(unsigned char i)
0006 ; 函數(shù)功能: 595數(shù)據(jù)輸出顯示
0006 ; 參 數(shù):
0006 ; 返 回 值: 無
0006 ; -----------------------------------------------------------------*/
0006 ; void SPI595Out(unsigned char i)
0006 ; {
0006 ; PORTB &= ~(1 << 4); /*準(zhǔn)備鎖存*/
0006 ; SPIMasterTransmit(i);
0006 ; PORTB |= (1 << 4); /*鎖存數(shù)據(jù)*/
0006 ; }
0006 ;
0006 ; void main(void) {
0006 ;
0006 ; unsigned char i = 0;
0006 ;
0006 ; DDRA = 0x00; /*方向輸入*/
0006 ; PORTA = 0xFF; /*打開上拉*/
0006 ; DDRB = 0xFF; /*方向輸出*/
0006 ; PORTB = 0xF0; /*電平設(shè)置*/
0006 ; DDRC = 0x00;
0006 ; PORTC = 0xFF;
0006 ; DDRD = 0xFF;
0006 ; PORTD = 0xFF;
0006 ;
0006 ; SPIMasterInit();
0006 ; while (1)
0006 ; {
0006 ; i ++;
0006 ; if (i > 9)
0006 ; {
0006 ; i = 0;
0006 ; }
0006 ; DelayMs(250);
0006 ; DelayMs(250);
0006 ; SPI595Out(disp[i]);
0006 ; }
0006 ; }
0006 ; }
0006 ; }
0006 ; }
0006 ; }
0006 ; }
0006 .dbline 137
0006 ; }
0006 FA01 movw R30,R20
0008 2080 ldd R2,z+0
000A 3324 clr R3
000C 1AE0 ldi R17,10
000E 022D mov R16,R2
0010 0E940000 xcall mod8u
0014 402E mov R4,R16
0016 1AE0 ldi R17,10
0018 022D mov R16,R2
001A 0E940000 xcall div8u
001E 802F mov R24,R16
0020 8F70 andi R24,#0x0F
0022 8295 swap R24
0024 8429 or R24,R4
0026 FA01 movw R30,R20
0028 8083 std z+0,R24
002A .dbline -2
002A L1:
002A 0E940000 xcall pop_gset1
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r dec 20 pc
0030 .dbend
0030 .dbfunc e ChangeHexToInt _ChangeHexToInt fV
0030 ; hex -> R16,R17
.even
0030 _ChangeHexToInt::
0030 .dbline -1
0030 .dbline 166
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 ; }
0030 .dbline 167
0030 ; }
0030 F801 movw R30,R16
0032 2080 ldd R2,z+0
0034 3324 clr R3
0036 822D mov R24,R2
0038 8295 swap R24
003A 8F70 andi R24,#0x0F
003C 9AE0 ldi R25,10
003E 989F mul R25,R24
0040 822D mov R24,R2
0042 8F70 andi R24,15
0044 202C mov R2,R0
0046 280E add R2,R24
0048 2082 std z+0,R2
004A .dbline -2
004A L2:
004A .dbline 0 ; func end
004A 0895 ret
004C .dbsym r hex 16 pc
004C .dbend
004C .dbfunc e Delay _Delay fV
004C ; i -> R16
.even
004C _Delay::
004C .dbline -1
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -