?? ad.lst
字號:
(0241) /*****************************************內部函數*****************************************/
(0242)
(0243) //長時延函數
(0244) extern void long_delay(void)
(0245) {
(0246) unsigned char i;
(0247) for(i=0;i<80;i++);
_long_delay:
i --> R16
009A 2700 CLR R16
009B C001 RJMP 0x009D
009C 9503 INC R16
009D 3500 CPI R16,0x50
009E F3E8 BCS 0x009C
(0248) }
009F 9508 RET
(0249)
(0250) //短時延函數
(0251) extern void short_delay(void)
(0252) {
(0253) unsigned char i;
(0254) for(i=0;i<46;i++);
_short_delay:
i --> R16
00A0 2700 CLR R16
00A1 C001 RJMP 0x00A3
00A2 9503 INC R16
00A3 320E CPI R16,0x2E
00A4 F3E8 BCS 0x00A2
(0255) }
00A5 9508 RET
_delay10ms:
i --> R20
j --> R22
k --> R10
count --> R16
00A6 940E046A CALL push_gset3
(0256)
(0257) //10ms時延函數
(0258) void delay10ms(unsigned int count)
(0259) {
(0260) unsigned char i,j,k;
(0261) for (i=0;i<count;i++)
00A8 2744 CLR R20
00A9 C00C RJMP 0x00B6
(0262) for(j=0;j<100;j++)
00AA 2766 CLR R22
00AB C007 RJMP 0x00B3
(0263) for(k=0;k<100;k++);
00AC 24AA CLR R10
00AD C001 RJMP 0x00AF
00AE 94A3 INC R10
00AF 2D8A MOV R24,R10
00B0 3684 CPI R24,0x64
00B1 F3E0 BCS 0x00AE
00B2 9563 INC R22
00B3 3664 CPI R22,0x64
00B4 F3B8 BCS 0x00AC
00B5 9543 INC R20
00B6 2E24 MOV R2,R20
00B7 2433 CLR R3
00B8 1620 CP R2,R16
00B9 0631 CPC R3,R17
00BA F378 BCS 0x00AA
(0264) }
00BB 940E0449 CALL pop_gset3
00BD 9508 RET
_send_byte:
i --> R20
out_byte --> R22
00BE 940E0466 CALL push_gset2
00C0 2F60 MOV R22,R16
(0265)
(0266) /****************** **********************
(0267) 函數名:HD7279字節發送函數
(0268) 功 能:HD7279發送一個字節
(0269) 輸 入:一個字節
(0270) 返 回:無
(0271) 備 注:HD7279硬件函數
(0272) ******************************************/
(0273) extern void send_byte(unsigned char out_byte)
(0274) {
(0275) unsigned char i;
(0276)
(0277) WR7279&=~clk7279; //clk7279=0;
00C1 98AA CBI 0x15,2
(0278) WR7279&=~cs7279; //cs7279=0
00C2 98A9 CBI 0x15,1
(0279) long_delay();
00C3 DFD6 RCALL _long_delay
(0280)
(0281) for(i=0;i<8;i++)
00C4 2744 CLR R20
00C5 C00B RJMP 0x00D1
(0282) {
(0283) if(out_byte&0x80)
00C6 FF67 SBRS R22,7
00C7 C002 RJMP 0x00CA
(0284) {
(0285) WR7279|=dat7279; //dat7279=1;
00C8 9AAB SBI 0x15,3
(0286) }
00C9 C001 RJMP 0x00CB
(0287) else
(0288) {
(0289) WR7279&=~dat7279; //dat7279=0;
00CA 98AB CBI 0x15,3
(0290) }
(0291) WR7279|=clk7279; //clk7279=1;
00CB 9AAA SBI 0x15,2
(0292) short_delay();
00CC DFD3 RCALL _short_delay
(0293) WR7279&=~clk7279; //clk7279=0;
00CD 98AA CBI 0x15,2
(0294) short_delay();
00CE DFD1 RCALL _short_delay
(0295) out_byte=out_byte<<1;
00CF 0F66 LSL R22
00D0 9543 INC R20
00D1 3048 CPI R20,0x8
00D2 F398 BCS 0x00C6
(0296) }
(0297) WR7279|=dat7279; //dat7279=1;
00D3 9AAB SBI 0x15,3
(0298) }
00D4 940E0446 CALL pop_gset2
00D6 9508 RET
_receive_byte:
i --> R20
in_byte --> R22
00D7 940E0466 CALL push_gset2
(0299)
(0300) /****************** **********************
(0301) 函數名:HD7279字節接收函數
(0302) 功 能:從HD7279接收一個字節
(0303) 輸 入:無
(0304) 返 回:一個字節
(0305) 備 注:HD7279硬件函數
(0306) ******************************************/
(0307) extern unsigned char receive_byte(void)
(0308) {
(0309) unsigned char i,in_byte;
(0310)
(0311) WR7279|=clk7279; //clk7279=1;
00D9 9AAA SBI 0x15,2
(0312)
(0313) DR7279&=~dat7279; //改dat7279為輸入
00DA 98A3 CBI 0x14,3
(0314)
(0315) long_delay();
00DB DFBE RCALL _long_delay
(0316)
(0317) for(i=0;i<8;i++)
00DC 2744 CLR R20
00DD C009 RJMP 0x00E7
(0318) {
(0319) WR7279|=clk7279; //clk7279=1;
00DE 9AAA SBI 0x15,2
(0320) short_delay();
00DF DFC0 RCALL _short_delay
(0321) in_byte=in_byte<<1;
00E0 0F66 LSL R22
(0322) if(RD7279&dat7279)
00E1 9B9B SBIS 0x13,3
00E2 C001 RJMP 0x00E4
(0323) {
(0324) in_byte=in_byte|0x01;
00E3 6061 ORI R22,1
(0325) }
(0326) WR7279&=~clk7279; //clk7279=0;
00E4 98AA CBI 0x15,2
(0327) short_delay();
00E5 DFBA RCALL _short_delay
00E6 9543 INC R20
00E7 3048 CPI R20,0x8
00E8 F3A8 BCS 0x00DE
(0328)
(0329) }
(0330) DR7279|=dat7279; //dat7279還原為輸出口
00E9 9AA3 SBI 0x14,3
(0331) return(in_byte);
00EA 2F06 MOV R16,R22
00EB 940E0446 CALL pop_gset2
00ED 9508 RET
_num_change7279:
X --> R20
00EE 940E044F CALL push_gset1
00F0 2F40 MOV R20,R16
(0332) }
(0333)
(0334) /****************** **********************
(0335) 函數名:HD7279按鍵等待接收函數
(0336) 功 能:當完成一次按鍵,返回鍵值
(0337) 輸 入:無
(0338) 返 回:鍵盤鍵值
(0339) 備 注:HD7279的控制函數
(0340) ******************************************/
(0341) extern unsigned char num_change7279 (unsigned char X)
(0342) {
(0343) switch (X)
00F1 2755 CLR R21
00F2 3040 CPI R20,0
00F3 E0E0 LDI R30,0
00F4 075E CPC R21,R30
00F5 F40C BGE 0x00F7
00F6 C034 RJMP 0x012B
00F7 E18B LDI R24,0x1B
00F8 E090 LDI R25,0
00F9 1784 CP R24,R20
00FA 0795 CPC R25,R21
00FB F40C BGE 0x00FD
00FC C02E RJMP 0x012B
00FD E002 LDI R16,2
00FE E010 LDI R17,0
00FF 019A MOVW R18,R20
0100 940E0406 CALL empy16s
0102 01F8 MOVW R30,R16
0103 E488 LDI R24,0x48
0104 E090 LDI R25,0
0105 0FE8 ADD R30,R24
0106 1FF9 ADC R31,R25
0107 9005 LPM R0,Z+
0108 9014 LPM R1,0(Z)
0109 01F0 MOVW R30,R0
010A 9409 IJMP
(0344) {
(0345) case ONE : return 0X01;
010B E001 LDI R16,1
010C C01F RJMP 0x012C
(0346) case TWO : return 0X02;
010D E002 LDI R16,2
010E C01D RJMP 0x012C
(0347) case THREE : return 0X03;
010F E003 LDI R16,3
0110 C01B RJMP 0x012C
(0348) case FOUR : return 0X04;
0111 E004 LDI R16,4
0112 C019 RJMP 0x012C
(0349) case FIVE : return 0X05;
0113 E005 LDI R16,5
0114 C017 RJMP 0x012C
(0350) case SIX : return 0X06;
0115 E006 LDI R16,6
0116 C015 RJMP 0x012C
(0351) case SEVEN : return 0X07;
0117 E007 LDI R16,7
0118 C013 RJMP 0x012C
(0352) case EIGHT : return 0X08;
0119 E008 LDI R16,0x8
011A C011 RJMP 0x012C
(0353) case NINE : return 0X09;
011B E009 LDI R16,0x9
011C C00F RJMP 0x012C
(0354) case ZERO : return 0X00;
011D 2700 CLR R16
011E C00D RJMP 0x012C
(0355) case AAAA : return 0x0A;
011F E00A LDI R16,0xA
0120 C00B RJMP 0x012C
(0356) case BBBB : return 0x0B;
0121 E00B LDI R16,0xB
0122 C009 RJMP 0x012C
(0357) case CCCC : return 0x0C;
0123 E00C LDI R16,0xC
0124 C007 RJMP 0x012C
(0358) case DDDD : return 0x0D;
0125 E00D LDI R16,0xD
0126 C005 RJMP 0x012C
(0359) case EEEE : return 0x0E;
0127 E00E LDI R16,0xE
0128 C003 RJMP 0x012C
(0360) case FFFF : return 0x0F;
0129 E00F LDI R16,0xF
012A C001 RJMP 0x012C
(0361) default : return 0xFF;
012B EF0F LDI R16,0xFF
012C 940E0452 CALL pop_gset1
012E 9508 RET
_dis_data:
temp_char --> R10
i --> R12
num --> Y+10
dig_end --> R14
dig_start --> R10
012F 940E0472 CALL push_gset5
0131 2EE2 MOV R14,R18
0132 2EA0 MOV R10,R16
(0362) }
(0363) }
(0364)
(0365)
(0366)
(0367)
(0368)
(0369) /****************** HD7279測試函數*************************
(0370)
(0371) // 作用:測試函數
(0372) extern void test_7279(void)
(0373) {
(0374) unsigned long wait_cnter;
(0375) unsigned long tmr,j,k;
(0376) unsigned char key7279_number;
(0377) init_7279();
(0378) while(1)
(0379) {
(0380) for(tmr=0;tmr<0xf000;tmr++); //上電延時
(0381) send_byte(CMD_RESET); //復位HD7279
(0382)
(0383) //測試指令演示
(0384)
(0385) send_byte(CMD_TEST);
(0386) for(j=0;j<3;j++) //延時約3秒
(0387) {
(0388) delay10ms(100);
(0389) }
(0390) send_byte(CMD_RESET); //清除顯示
(0391)
(0392)
(0393) {
(0394) write7279(DECODE0,0x80);
(0395) write7279(DECODE0+1,0x81);
(0396) write7279(DECODE0+2,0x82);
(0397) write7279(DECODE0+3,0x83);
(0398) write7279(DECODE0+4,0x84);
(0399) write7279(DECODE0+5,0x85);
(0400) write7279(DECODE0+6,0x86);
(0401) write7279(DECODE0+7,0x87);
(0402) }
(0403)
(0404) delay10ms(200);
(0405)
(0406) //閃爍指令及鍵盤接口測試,將用戶按鍵的鍵碼顯示出來,如果10秒內無按鍵或按S0鍵即進入下一步演示
(0407) wait_cnter=0;
(0408) key7279_number=0xff;
(0409) write7279(BLINKCTL,0xfc); //第1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -