⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.lst

📁 点阵显示汉字
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 + -