📄 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 + -