?? 1.lst
字號:
__start:
__text_start:
0205 E5CF LDI R28,0x5F
0206 E0D4 LDI R29,4
0207 BFCD OUT 0x3D,R28
0208 BFDE OUT 0x3E,R29
0209 51C0 SUBI R28,0x10
020A 40D0 SBCI R29,0
020B EA0A LDI R16,0xAA
020C 8308 STD Y+0,R16
020D 2400 CLR R0
020E E6E5 LDI R30,0x65
020F E0F0 LDI R31,0
0210 E014 LDI R17,4
0211 33EF CPI R30,0x3F
0212 07F1 CPC R31,R17
0213 F011 BEQ 0x0216
0214 9201 ST R0,Z+
0215 CFFB RJMP 0x0211
0216 8300 STD Z+0,R16
0217 E0E4 LDI R30,4
0218 E0F4 LDI R31,4
0219 E6A0 LDI R26,0x60
021A E0B0 LDI R27,0
021B E014 LDI R17,4
021C 30E9 CPI R30,0x9
021D 07F1 CPC R31,R17
021E F021 BEQ 0x0223
021F 95C8 LPM
0220 9631 ADIW R30,1
0221 920D ST R0,X+
0222 CFF9 RJMP 0x021C
0223 940E0491 CALL _main
_exit:
0225 CFFF RJMP _exit
FILE: E:\單片機\AVR程序\32x80大點陣\1.c
(0001) //頭文件
(0002) #include<ioM16v.h>
(0003) #include<macros.h>
(0004)
(0005)
(0006) /*------宏定義------*/
(0007) #define uchar unsigned char
(0008) #define uint unsigned int
(0009)
(0010) #define set_STB( ) PORTB|=(1<<4) //鎖存位(上升沿有效)
(0011) #define clr_STB( ) PORTB&=~(1<<4)
(0012)
(0013) #define set_CLK( ) PORTB|=(1<<5) //時鐘端(上升沿有效)
(0014) #define clr_CLK( ) PORTB&=~(1<<5)
(0015)
(0016) #define set_DG( ) PORTB|=(1<<6) //綠色數據口
(0017) #define clr_DG( ) PORTB&=~(1<<6)
(0018)
(0019) #define set_DR( ) PORTB|=(1<<7) //紅色數據口
(0020) #define clr_DR( ) PORTB&=~(1<<7)
(0021)
(0022) #define set_G( ) PORTD|=(1<<0) //G行控制有效位(低電平有效)
(0023) #define clr_G( ) PORTD&=~(1<<0)
(0024)
(0025) #define hanzishu 18 //輸入漢字數
(0026) #define howmany0 10 //在開始顯示漢字前填入多少個相同的漢字 (一般填空字)
(0027) #define position 6 //填什么樣的相同漢字(一般填空字)
(0028) #define shopshow 9 //在移動過程中靜態顯示時間 單位us
(0029) #define displayTime 200 //單程顯示時間 單位us
(0030) #define red 0
(0031) #define greed 1
(0032) #define oringe 2
(0033) /***************************************************************************************************
(0034) 全局變量
(0035) ****************************************************************************************************/
(0036) uchar Ledplay[17][(howmany0+hanzishu)*2+2];//第一個參數為規格固定的,第二個參數為載入字符數*2+2
(0037) // (本程序中的字符 有10個空字和存儲在data[][]中要顯示的10個字符)
(0038) //顯示寄存器//最后一行為空行000000000000000000000//
(0039) //最后兩列都為0x00是為了填空!00000000000000000000//
(0040) uchar bn=0;
(0041) /***************************************************************************************************
(0042) 全局變量
(0043) ****************************************************************************************************/
(0044) /***************************************************************************************************
(0045) 遲時函數
(0046) ****************************************************************************************************/
(0047) void delay_1us(void) //1us延時函數
(0048) {
(0049) asm("nop");
_delay_1us:
0226 0000 NOP
0227 9508 RET
_delay_nus:
i --> R20
n --> R22
0228 940E04A9 CALL push_gset2
022A 01B8 MOVW R22,R16
(0050) }
(0051) void delay_nus(unsigned int n) //N us延時函數
(0052) {
(0053) unsigned int i=0;
022B 2744 CLR R20
022C 2755 CLR R21
(0054) for (i=0;i<n;i++)
022D C003 RJMP 0x0231
(0055) delay_1us();
022E DFF7 RCALL _delay_1us
022F 5F4F SUBI R20,0xFF
0230 4F5F SBCI R21,0xFF
0231 1746 CP R20,R22
0232 0757 CPC R21,R23
0233 F3D0 BCS 0x022E
0234 940E049A CALL pop_gset2
0236 9508 RET
(0056) }
(0057) void delay_1ms(void) //1ms延時函數
(0058) {
(0059) unsigned int i;
(0060) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0237 2700 CLR R16
0238 2711 CLR R17
0239 C002 RJMP 0x023C
023A 5F0F SUBI R16,0xFF
023B 4F1F SBCI R17,0xFF
023C 3704 CPI R16,0x74
023D E0E4 LDI R30,4
023E 071E CPC R17,R30
023F F3D0 BCS 0x023A
0240 9508 RET
_delay_nms:
i --> R20
n --> R22
0241 940E04A9 CALL push_gset2
0243 01B8 MOVW R22,R16
(0061) }
(0062) void delay_nms(unsigned int n) //N ms延時函數
(0063) {
(0064) unsigned int i=0;
0244 2744 CLR R20
0245 2755 CLR R21
(0065) for (i=0;i<n;i++)
0246 C003 RJMP 0x024A
(0066) delay_1ms();
0247 DFEF RCALL _delay_1ms
0248 5F4F SUBI R20,0xFF
0249 4F5F SBCI R21,0xFF
024A 1746 CP R20,R22
024B 0757 CPC R21,R23
024C F3D0 BCS 0x0247
024D 940E049A CALL pop_gset2
024F 9508 RET
_Send_Byte_DG:
i --> R20
data --> R16
0250 940E04AB CALL push_gset1
(0067) }
(0068) /***************************************************************************************************
(0069) 遲時函數
(0070) ****************************************************************************************************/
(0071)
(0072) /***************************************************************************************************
(0073) 把上述代碼放在code區
(0074) ****************************************************************************************************/
(0075) #pragma data:code
(0076) //下面是漢字儲存數組
(0077) // 上述兩參數為 存儲字數,規定格式
(0078) //下列代碼按順序,每兩個為這個漢字的對應行要亮的點 1為亮0為滅
(0079) const uchar data[19][32]={
(0080) /*-- 文字: 過 --*/
(0081) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0082) 0x40,0x10,0x20,0x10,0x30,0x10,0x20,0x10,0x07,0xFE,0x00,0x10,0x02,0x10,0xE1,0x10,
(0083) 0x21,0x90,0x21,0x10,0x20,0x10,0x20,0x50,0x20,0x20,0x58,0x00,0x87,0xFE,0x00,0x00,
(0084)
(0085) //下面是數字10: 構造分法,用1與0的數碼,把0的數碼交替地放在1代碼后面
(0086) //0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x70,0x24,0x10,0x42,0x10,0x42,0x10,0x42,
(0087) //0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x7c,0x18,0x00,0x00,0x00,0x00,
(0088)
(0089) /*-- 文字: 去 --*/
(0090) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0091) 0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
(0092) 0x7F,0xFE,0x02,0x00,0x06,0x00,0x08,0x20,0x10,0x10,0x3F,0xF8,0x10,0x10,0x00,0x00,
(0093)
(0094) /*-- 文字: 屬 --*/
(0095) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0096) 0x3F,0xFC,0x20,0x04,0x3F,0xFC,0x20,0x00,0x2F,0xF8,0x20,0x80,0x27,0xF8,0x24,0x88,
(0097) 0x27,0xF8,0x20,0x80,0x2F,0xFC,0x28,0xA4,0x48,0xF4,0x4B,0x14,0x88,0x04,0x08,0x0C,
(0098)
(0099) /*-- 文字: 于 --*/
(0100) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0101) 0x00,0x00,0x3F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
(0102) 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x09,0x00,0x05,0x00,0x02,0x00,
(0103)
(0104) /*-- 文字: 死 --*/
(0105) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0106) 0x00,0x00,0x7F,0xFE,0x08,0x40,0x08,0x40,0x1F,0x40,0x11,0x46,0x21,0x58,0x32,0x60,
(0107) 0x4A,0x40,0x8A,0x40,0x04,0x40,0x04,0x42,0x08,0x42,0x30,0x42,0xC0,0x3E,0x00,0x00,
(0108)
(0109) /*-- 文字: 神 --*/
(0110) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0111) 0x20,0x20,0x10,0x20,0x10,0x20,0xFD,0xFC,0x05,0x24,0x09,0x24,0x11,0xFC,0x39,0x24,
(0112) 0x55,0x24,0x95,0xFC,0x11,0x24,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,0x10,0x20,
(0113)
(0114) /*-- 11文字: 空字 --*/
(0115) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0116) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//11
(0117) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0118) /*-- 文字: 現 --*/
(0119) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0120) 0x00,0x00,0xFF,0xF8,0x12,0x08,0x12,0x48,0x12,0x48,0x12,0x48,0x7E,0x48,0x12,0x48,
(0121) 0x12,0x48,0x12,0xA8,0x1C,0xA0,0xE1,0x22,0x01,0x22,0x02,0x22,0x04,0x1E,0x08,0x00,
(0122)
(0123) /*-- 文字: 在 --*/
(0124) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0125) 0x02,0x00,0x02,0x00,0x7F,0xFE,0x04,0x00,0x04,0x00,0x08,0x40,0x18,0x40,0x17,0xFC,
(0126) 0x30,0x40,0x50,0x40,0x90,0x40,0x10,0x40,0x10,0x40,0x17,0xFE,0x10,0x00,0x00,0x00,
(0127)
(0128) /*-- 文字: 與 --*/
(0129) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0130) 0x00,0x00,0x08,0x00,0x08,0x04,0x0F,0xFE,0x08,0x00,0x08,0x00,0x0F,0xFC,0x00,0x04,
(0131) 0x00,0x04,0x00,0x24,0x7F,0xF4,0x00,0x04,0x00,0x04,0x00,0x48,0x00,0x30,0x00,0x00,
(0132)
(0133) /*-- 文字: 未 --*/
(0134) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0135) 0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x03,0x00,
(0136) 0x03,0x80,0x05,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00,
(0137)
(0138) /*-- 文字: 來 --*/
(0139) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0140) 0x01,0x00,0x01,0x00,0x3F,0xFC,0x01,0x00,0x09,0x30,0x05,0x20,0x03,0x40,0x7F,0xFE,
(0141) 0x01,0x80,0x03,0x40,0x05,0x20,0x09,0x18,0x31,0x0E,0xC1,0x04,0x01,0x00,0x01,0x00,
(0142)
(0143) /*-- 文字: 卻 --*/
(0144) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0145) 0x08,0x00,0x08,0x7C,0x08,0x44,0x7F,0x44,0x08,0x44,0x08,0x44,0x08,0x44,0xFF,0x44,
(0146) 0x10,0x44,0x12,0x44,0x21,0x44,0x27,0xD4,0x79,0x48,0x20,0x40,0x00,0x40,0x00,0x40,
(0147)
(0148) /*-- 文字: 由 --*/
(0149) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0150) 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,
(0151) 0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x20,0x08,0x00,0x00,
(0152)
(0153) /*-- 文字: 我 --*/
(0154) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0155) 0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x48,
(0156) 0x0E,0x28,0x38,0x30,0xC8,0x20,0x08,0x50,0x09,0x92,0x08,0x0A,0x28,0x06,0x10,0x02,
(0157)
(0158)
(0159) /*-- 文字: 們 --*/
(0160) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0161) 0x0A,0x00,0x09,0x00,0x11,0xBC,0x11,0x04,0x34,0x04,0x24,0x04,0x64,0x04,0xA4,0x04,
(0162) 0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x04,0x24,0x14,0x24,0x08,0x00,0x00,
(0163)
(0164)
(0165) /*-- 文字: 掌 --*/
(0166) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0167) 0x11,0x10,0x09,0x20,0x7F,0xFE,0x40,0x04,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x00,
(0168) 0x3F,0xF0,0x01,0x00,0x3F,0xF8,0x01,0x00,0x7F,0xFC,0x01,0x00,0x05,0x00,0x02,0x00,
(0169)
(0170) /*-- 文字: 握 --*/
(0171) /*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
(0172) 0x20,0x00,0x23,0xFC,0x22,0x04,0xFB,0xFC,0x22,0x00,0x23,0xFE,0x2A,0x40,0x32,0x88,
(0173) 0x63,0xFC,0xA2,0x24,0x22,0x20,0x23,0xFC,0x24,0x20,0x24,0x20,0xAB,0xFE,0x40,0x00,
(0174) };
(0175) //下面是數字儲存數組
(0176) const data1[10][16]=
(0177) {
(0178) /*-- 文字: 0 --*/
(0179) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0180) {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},
(0181)
(0182) /*-- 文字: 1 --*/
(0183) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0184) {0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00},
(0185)
(0186) /*-- 文字: 2 --*/
(0187) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0188) {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00},
(0189)
(0190) /*-- 文字: 3 --*/
(0191) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0192) {0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00},
(0193)
(0194) /*-- 文字: 4 --*/
(0195) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0196) {0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00},
(0197)
(0198) /*-- 文字: 5 --*/
(0199) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0200) {0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00},
(0201)
(0202) /*-- 文字: 6 --*/
(0203) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0204) {0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00},
(0205)
(0206) /*-- 文字: 7 --*/
(0207) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0208) {0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00},
(0209)
(0210) /*-- 文字: 8 --*/
(0211) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0212) {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00},
(0213)
(0214) /*-- 文字: 9 --*/
(0215) /*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
(0216) {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00}
(0217) };
(0218) //下面是驅動行 驅動74LS154
(0219) const uchar ROW[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};//行控制數組
(0220) #pragma data:data
(0221) /***************************************************************************************************
(0222) 把上述代碼放在code區
(0223) ****************************************************************************************************/
(0224)
(0225) /***************************************************************************************************
(0226) 下面32*80大點陣驅動程序
(0227) ****************************************************************************************************/
(0228) //送綠色數據
(0229) void Send_Byte_DG(uchar data)
(0230) {
(0231) uchar i=0;
0252 2744 CLR R20
(0232) clr_DR( );
0253 98C7 CBI 0x18,7
(0233) for(i=0;i<8;i++)
0254 C009 RJMP 0x025E
(0234) {
(0235) clr_CLK();
0255 98C5 CBI 0x18,5
(0236) if((data&0x80)==0)
0256 FD07 SBRC R16,7
0257 C002 RJMP 0x025A
(0237) clr_DG();
0258 98C6 CBI 0x18,6
0259 C001 RJMP 0x025B
(0238) else//列控制
(0239) set_DG();
025A 9AC6 SBI 0x18,6
(0240) set_CLK();
025B 9AC5 SBI 0x18,5
(0241) data<<=1;
025C 0F00 LSL R16
025D 9543 INC R20
025E 3048 CPI R20,0x8
025F F3A8 BCS 0x0255
(0242) }
(0243) clr_DG();
0260 98C6 CBI 0x18,6
0261 940E04AE CALL pop_gset1
0263 9508 RET
_Send_Byte_DR:
i --> R20
data --> R16
0264 940E04AB CALL push_gset1
(0244) }
(0245) //送紅色數據
(0246) void Send_Byte_DR(uchar data)
(0247) {
(0248) uchar i=0;
0266 2744 CLR R20
(0249) clr_DG();
0267 98C6 CBI 0x18,6
(0250) for(i=0;i<8;i++)
0268 C009 RJMP 0x0272
(0251) {
(0252) clr_CLK();
0269 98C5 CBI 0x18,5
(0253) if((data&0x80)==0)
026A FD07 SBRC R16,7
026B C002 RJMP 0x026E
(0254) clr_DR();
026C 98C7 CBI 0x18,7
026D C001 RJMP 0x026F
(0255) else//列控制 該位所在列的二極管得正電位 在允許接地的情況下發光!!!
(0256) set_DR();
026E 9AC7 SBI 0x18,7
(0257) set_CLK();
026F 9AC5 SBI 0x18,5
(0258) data<<=1;
0270 0F00 LSL R16
0271 9543 INC R20
0272 3048 CPI R20,0x8
0273 F3A8 BCS 0x0269
(0259) }
(0260) clr_DR();
0274 98C7 CBI 0x18,7
0275 940E04AE CALL pop_gset1
0277 9508 RET
_Send_Byte_DR_DG:
i --> R20
data --> R16
0278 940E04AB CALL push_gset1
(0261) }
(0262) //送橙色數據
(0263) void Send_Byte_DR_DG(uchar data)
(0264) {
(0265) uchar i=0;
027A 2744 CLR R20
(0266) for(i=0;i<8;i++)
027B C00B RJMP 0x0287
(0267) {
(0268) clr_CLK();
027C 98C5 CBI 0x18,5
(0269)
(0270) if((data&0x80)==0)
027D FD07 SBRC R16,7
027E C003 RJMP 0x0282
(0271) {
(0272) clr_DG();
027F 98C6 CBI 0x18,6
(0273) clr_DR();
0280 98C7 CBI 0x18,7
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -