📄 led.lis
字号:
011A 80930200 sts L3,R24
011E .dbline 99
011E ; }
011E L21:
011E L20:
011E L18:
011E L16:
011E .dbline 100
011E L13:
011E .dbline -2
011E L1:
011E 2990 ld R2,y+
0120 2FBE out 0x3f,R2
0122 E991 ld R30,y+
0124 9991 ld R25,y+
0126 8991 ld R24,y+
0128 3990 ld R3,y+
012A 2990 ld R2,y+
012C .dbline 0 ; func end
012C 1895 reti
012E .dbend
012E .dbfunc e main _main fV
012E ; i -> <dead>
012E ; x -> R16
.even
012E _main::
012E .dbline -1
012E .dbline 186
012E ; }
012E ; /*==========响铃2次函数结束============*/
012E ;
012E ; }
012E ;
012E ; /*========HT1622驱动程序========*/
012E ; /*
012E ; void write_clk() //允许写脉冲
012E ; {
012E ; _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP();
012E ; HT_WR_ONE;
012E ; _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP();
012E ; HT_WR_ZER;
012E ; }
012E ;
012E ; void send_bit(unsigned char op_code,unsigned char len)
012E ; //从高位的位开始送
012E ; {
012E ;
012E ; while(len--)
012E ; {
012E ; if(op_code&0x80==0x80)
012E ; {
012E ; HT_DT_ONE;
012E ; }
012E ; else
012E ; {
012E ; HT_DT_ZER;
012E ; }
012E ; write_clk();
012E ; op_code = op_code<<1;
012E ; }
012E ; }
012E ;
012E ; void send_command(unsigned char command) //送一个命令
012E ; {
012E ; HT_CS_ZER;
012E ; send_bit(0x80,3);
012E ; send_bit(command,8);
012E ; write_clk();
012E ; HT_CS_ONE;
012E ; }
012E ;
012E ; void send_all_char() //开始送数据,一次全部送完
012E ; {
012E ; unsigned char x,y;
012E ; unsigned char c;
012E ;
012E ; HT_CS_ZER;
012E ; send_bit(0xa0,3);
012E ; _NOP();
012E ; send_bit(0,6); //从第0个地址开始送数据
012E ; for(x=0;x!=23;x++)
012E ; {
012E ; c=LCD[x];
012E ; for(y=0;y!=8;y++)
012E ; {
012E ; if(c&0x01==1)
012E ; {
012E ; HT_DT_ONE;
012E ; }
012E ; else
012E ; {
012E ; HT_DT_ZER;
012E ; }
012E ; write_clk();
012E ; c=c>>1;
012E ; }
012E ; }
012E ; HT_CS_ONE;
012E ; }
012E ;
012E ; void init_1622() //LCD初始化
012E ; {
012E ; HT_CS_ONE;
012E ; HT_WR_ONE;
012E ; HT_DT_ONE;
012E ; send_command(1); //SYS EN
012E ; send_command(3); //LCD ON
012E ; send_command(0x29); // 1/3 偏压,4个公共端
012E ; }
012E ;
012E ; */
012E ;
012E ; /*===============主函数部分===================*/
012E ; void main(void)
012E ; {
012E .dbline 199
012E 0027 clr R16
0130 09C0 rjmp L27
0132 L24:
0132 .dbline 199
0132 80E0 ldi R24,<_LCD
0134 90E0 ldi R25,>_LCD
0136 E02F mov R30,R16
0138 FF27 clr R31
013A E80F add R30,R24
013C F91F adc R31,R25
013E 8FEF ldi R24,255
0140 8083 std z+0,R24
0142 L25:
0142 .dbline 199
0142 0395 inc R16
0144 L27:
0144 .dbline 199
0144 ; unsigned int i;
0144 ; unsigned char x;
0144 ; /*===============初始化函数============*/
0144 ; // init_1622();
0144 ; /*
0144 ; ======================================
0144 ; 采用定时器管理
0144 ; 定时器0预分频系数为1024,定时时间为1.25MS
0144 ; 初值为=256-1.25*14.7456*1000000/1024/1000=238
0144 ; 首先要开启定时器0,
0144 ; =========================================
0144 ; */
0144 ; for(x=0;x<23;x++) LCD[x]=0XFF;
0144 0731 cpi R16,23
0146 A8F3 brlo L24
0148 .dbline 201
0148 ;
0148 ; TCCR0=0X05; //预分频系数为1024 0000 0101
0148 85E0 ldi R24,5
014A 83BF out 0x33,R24
014C .dbline 202
014C ; TCNT0=0XEE; //238
014C 8EEE ldi R24,238
014E 82BF out 0x32,R24
0150 .dbline 203
0150 ; TIMSK|=0X01; //使能T/C0中断,允许中断
0150 89B7 in R24,0x39
0152 8160 ori R24,1
0154 89BF out 0x39,R24
0156 .dbline 205
0156 ;
0156 ; DDRD&=0XF3; //PIND2 PIND3设为输入
0156 81B3 in R24,0x11
0158 837F andi R24,243
015A 81BB out 0x11,R24
015C .dbline 206
015C ; MCUCR=0X08; //00001000下降沿触发中断、GICR
015C 88E0 ldi R24,8
015E 85BF out 0x35,R24
0160 .dbline 214
0160 ; //ISC11,ISC10 INT1下降沿
0160 ;
0160 ; /*========PB2输出PWM信号WGM[3;0]=1011
0160 ; ========加一计数中比较匹配时清零OC1B
0160 ; ========减一计数中比较匹配时置位
0160 ; ========CS12,CS11,CS10=010,表示8预分频计时器
0160 ; */
0160 ; DDRB|=0X3e;//PB2为输出端,(pb3,pb4,pb5为液晶驱动脚设为输出)
0160 87B3 in R24,0x17
0162 8E63 ori R24,62
0164 87BB out 0x17,R24
0166 .dbline 215
0166 ; TCCR1A=0X63; //0110 0011
0166 83E6 ldi R24,99
0168 8FBD out 0x2f,R24
016A .dbline 216
016A ; TCCR1B=0X12; //0001 0010
016A 82E1 ldi R24,18
016C 8EBD out 0x2e,R24
016E .dbline 217
016E ; OCR1A=0x61A7; //设置TOP值为1249
016E 87EA ldi R24,24999
0170 91E6 ldi R25,97
0172 9BBD out 0x2b,R25
0174 8ABD out 0x2a,R24
0176 .dbline 218
0176 ; OCR1B=2500; //比较匹配值
0176 84EC ldi R24,2500
0178 99E0 ldi R25,9
017A 99BD out 0x29,R25
017C 88BD out 0x28,R24
017E .dbline 220
017E ;
017E ; SREG =0X80; //使能总中断
017E 80E8 ldi R24,128
0180 8FBF out 0x3f,R24
0182 .dbline 221
0182 ; MBZ=0;
0182 2224 clr R2
0184 20921900 sts _MBZ,R2
0188 11C0 rjmp L29
018A L28:
018A .dbline 223
018A ; while(1)
018A ; {
018A .dbline 225
018A ; // send_all_char();
018A ; DDRD|=BIT(PD7); //PD7设为输出
018A 8F9A sbi 0x11,7
018C .dbline 226
018C ; DDRD|=BIT(PD6);
018C 8E9A sbi 0x11,6
018E .dbline 227
018E ; if(MBZ==0)
018E 20901900 lds R2,_MBZ
0192 2220 tst R2
0194 09F4 brne L31
0196 .dbline 228
0196 ; {
0196 .dbline 229
0196 ; LED_LIANG; //PD7为1,点亮LED指示灯
0196 979A sbi 0x12,7
0198 .dbline 230
0198 ; }
0198 L31:
0198 .dbline 231
0198 ; if(MBZ==1)
0198 80911900 lds R24,_MBZ
019C 8130 cpi R24,1
019E 31F4 brne L33
01A0 .dbline 232
01A0 ; {
01A0 .dbline 233
01A0 ; LED_MIE;
01A0 9798 cbi 0x12,7
01A2 .dbline 234
01A2 ; a.BEEP1=1;
01A2 80910000 lds R24,_a
01A6 8160 ori R24,1
01A8 80930000 sts _a,R24
01AC .dbline 235
01AC ; }
01AC L33:
01AC .dbline 236
01AC L29:
01AC .dbline 222
01AC EECF rjmp L28
01AE X4:
01AE .dbline -2
01AE L23:
01AE .dbline 0 ; func end
01AE 0895 ret
01B0 .dbsym l i 1 i
01B0 .dbsym r x 16 c
01B0 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\AVR-PRO\avr3\led.c
0000 _a::
0000 .blkb 1
0001 .dbstruct 0 1 data
0001 .dbfield 0 BEEP1 F[0:1]
0001 .dbfield 0 BEEP2 F[1:1]
0001 .dbfield 0 BIT1 F[2:1]
0001 .dbfield 0 BIT2 F[3:1]
0001 .dbfield 0 BIT3 F[4:1]
0001 .dbfield 0 BIT4 F[5:1]
0001 .dbfield 0 BIT5 F[6:1]
0001 .dbfield 0 BIT6 F[7:1]
0001 .dbend
0001 .dbsym e a _a S[data]
0001 _LCD::
0001 .blkb 23
0018 .dbsym e LCD _LCD A[23:23]c
0018 _VARIA_BIT::
0018 .blkb 1
0019 .dbsym e VARIA_BIT _VARIA_BIT c
0019 _MBZ::
0019 .blkb 1
001A .dbsym e MBZ _MBZ c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -