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

📄 128_lcd.lst

📁 ssd1325控制器液晶的驱动程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    07E7 EFCF      LDI	R28,0xFF
    07E8 E1D0      LDI	R29,0x10
    07E9 BFCD      OUT	0x3D,R28
    07EA BFDE      OUT	0x3E,R29
    07EB 51C0      SUBI	R28,0x10
    07EC 40D0      SBCI	R29,0
    07ED EA0A      LDI	R16,0xAA
    07EE 8308      STD	Y+0,R16
    07EF 2400      CLR	R0
    07F0 E4E8      LDI	R30,0x48
    07F1 E0F1      LDI	R31,1
    07F2 E015      LDI	R17,5
    07F3 35E2      CPI	R30,0x52
    07F4 07F1      CPC	R31,R17
    07F5 F011      BEQ	0x07F8
    07F6 9201      ST	R0,Z+
    07F7 CFFB      RJMP	0x07F3
    07F8 8300      STD	Z+0,R16
    07F9 E8E6      LDI	R30,0x86
    07FA E0FF      LDI	R31,0xF
    07FB E0A0      LDI	R26,0
    07FC E0B1      LDI	R27,1
    07FD E01F      LDI	R17,0xF
    07FE 3CEE      CPI	R30,0xCE
    07FF 07F1      CPC	R31,R17
    0800 F021      BEQ	0x0805
    0801 95C8      LPM
    0802 9631      ADIW	R30,1
    0803 920D      ST	R0,X+
    0804 CFF9      RJMP	0x07FE
    0805 940E087D  CALL	_main
_exit:
    0807 CFFF      RJMP	_exit
FILE: G:\IccPro\mega128_lcd\lcmdisp.c
(0001) /****************************************************************************************
(0002) * 文件名:LCMDISP.C
(0003) * 功能:GUI测试及演示程序。
(0004) * 作者:黄绍斌
(0005) * 日期:2003.09.09
(0006) ****************************************************************************************/
(0007) #include "config.h"
(0008)  
(0009) 
(0010) // 一个单色图标的数据,宽度x高度=40x40
(0011) uint8 const ICO1[] = 
(0012) {
(0013) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0014) 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x07,0x00,0xE0,0x00,0x00,0x18,
(0015) 0x00,0x18,0x00,0x00,0x30,0x00,0x0C,0x00,0x00,0x40,0x00,0x02,0x00,0x00,0x80,0x00,
(0016) 0x01,0x00,0x01,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0xC0,0x02,0x01,0x81,0x80,
(0017) 0x40,0x04,0x03,0xC3,0xC0,0x20,0x04,0x03,0xC3,0xC0,0x20,0x04,0x03,0xC3,0xC0,0x20,
(0018) 0x08,0x03,0xC3,0xC0,0x10,0x08,0x03,0xC3,0xC0,0x10,0x08,0x01,0x81,0x80,0x10,0x08,
(0019) 0x08,0x00,0x10,0x10,0x08,0x08,0x00,0x10,0x10,0x08,0x10,0x00,0x08,0x10,0x08,0xF0,
(0020) 0x00,0x0F,0x10,0x08,0x08,0x00,0x10,0x10,0x04,0x04,0x00,0x20,0x20,0x04,0x06,0x00,
(0021) 0x60,0x20,0x04,0x03,0x81,0xC0,0x20,0x02,0x01,0x7E,0x80,0x40,0x03,0x00,0x81,0x00,
(0022) 0xC0,0x01,0x00,0x42,0x00,0x80,0x00,0x80,0x3C,0x01,0x00,0x00,0x40,0x00,0x02,0x00,
(0023) 0x00,0x30,0x00,0x0C,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x07,0x00,0xE0,0x00,0x00,
(0024) 0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0025) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
(0026) };
(0027) unsigned char KeyNew,KeyDown; 
(0028) char* p; 
(0029) // 样条曲线的4个端点
(0030) PointXY log_pin[] = { {40,  30},
(0031)                       {60, 60},
(0032)                       {80, 30},
(0033)                       {100, 60}
(0034)                     };
(0035) 
(0036) // 封闭多边形的各个顶点                    
(0037) uint32  const poly6[] = {750,55, 85,40, 90,45, 100,42, 115,55, 75,55};
(0038) unsigned char hz0[]=				//韩
(0039) 
(0040) {
(0041) 0x10, 0x20, 0x10, 0x20, 0xfd, 0xfe, 0x10, 0x20, 0x7c, 0x20, 0x44, 0xfc, 0x7c, 0x20, 0x44, 0x20, 
(0042) 0x7d, 0xfe, 0x10, 0x22, 0xfe, 0x22, 0x10, 0x22, 0x10, 0x2a, 0x10, 0x24, 0x10, 0x20, 0x10, 0x20 
(0043) 
(0044) };  
(0045) 
(0046) WINDOWS *first_win;
(0047) 
(0048) void Port_Init()
(0049) {
(0050)  PORTD = 0XFF;
_Port_Init:
    0808 EF8F      LDI	R24,0xFF
    0809 BB82      OUT	0x12,R24
(0051)  DDRD  = 0XFF;
    080A BB81      OUT	0x11,R24
(0052)  PORTB = 0XFF;
    080B BB88      OUT	0x18,R24
(0053)  DDRB  = 0X00;
    080C 2422      CLR	R2
    080D BA27      OUT	0x17,R2
(0054)  PORTF = 0x00;
    080E 92200062  STS	0x62,R2
(0055)  DDRF  = 0x1F;
    0810 E18F      LDI	R24,0x1F
    0811 93800061  STS	0x61,R24
(0056)  PORTE = 0x0F;
    0813 E08F      LDI	R24,0xF
    0814 B983      OUT	0x03,R24
(0057)  DDRE  = 0x00;
    0815 B822      OUT	0x02,R2
    0816 9508      RET
(0058) }    
(0059) //call this routine to initialize all peripherals
(0060) void init_devices(void)
(0061) {
(0062)  //stop errant interrupts until set up
(0063)  CLI(); //disable all interrupts
_init_devices:
    0817 94F8      BCLR	7
(0064)  XDIV  = 0x00; //xtal divider
    0818 2422      CLR	R2
    0819 BE2C      OUT	0x3C,R2
(0065)  XMCRA = 0x00; //external memory
    081A 9220006D  STS	0x6D,R2
(0066)  Port_Init();
    081C DFEB      RCALL	_Port_Init
(0067) 
(0068)  MCUCR = 0x00;
    081D 2422      CLR	R2
    081E BE25      OUT	0x35,R2
(0069)  EICRA = 0x00; //extended ext ints
    081F 9220006A  STS	0x6A,R2
(0070)  EICRB = 0x00; //extended ext ints
    0821 BE2A      OUT	0x3A,R2
(0071)  EIMSK = 0x00;
    0822 BE29      OUT	0x39,R2
(0072)  TIMSK = 0x00; //timer interrupt sources
    0823 BE27      OUT	0x37,R2
(0073)  ETIMSK = 0x00; //extended timer interrupt sources
    0824 9220007D  STS	0x7D,R2
(0074)  SEI(); //re-enable interrupts
    0826 9478      BSET	7
    0827 9508      RET
_key_scan:
  shift                --> Y+1
  j                    --> Y+1
  i                    --> R20
    0828 940E3BA9  CALL	push_gset1
(0075)  //all peripherals are now initialized
(0076) }          
(0077) void key_scan(void)
(0078) {
(0079)  unsigned char i,j,shift;
(0080) 
(0081) 	//if (key_scan_begin==0) return;
(0082) 	//key_scan_begin=0; 
(0083) 	PORTE|=0X0f;//UP PULL
    082A B183      IN	R24,0x03
    082B 608F      ORI	R24,0xF
    082C B983      OUT	0x03,R24
(0084) 	PORTF|=0x1f;//OUT	  
    082D 91800062  LDS	R24,0x62
    082F 618F      ORI	R24,0x1F
    0830 93800062  STS	0x62,R24
(0085)     for (i=0;i<5;i++)
    0832 2744      CLR	R20
    0833 C020      RJMP	0x0854
(0086)         {
(0087)          PORTF&=~(1<<i); //键盘线扫描
    0834 E001      LDI	R16,1
    0835 2F14      MOV	R17,R20
    0836 940E3BE9  CALL	lsl8
    0838 2E20      MOV	R2,R16
    0839 9420      COM	R2
    083A 90300062  LDS	R3,0x62
    083C 2032      AND	R3,R2
    083D 92300062  STS	0x62,R3
(0088) 		 //delay_us(1);		 
(0089)          KeyNew=PINE&0x0f;//读取键盘扫描信号,屏蔽高四位PC0~3
    083F B181      IN	R24,0x01
    0840 708F      ANDI	R24,0xF
    0841 9380014D  STS	KeyNew,R24
(0090)          if (KeyNew!=0x0f)//如果有键按下,延时10ms消抖
    0843 308F      CPI	R24,0xF
    0844 F071      BEQ	0x0853
(0091)             {   
(0092) 			 //key_up=0;  
(0093) 			 KeyDown = 1;      
    0845 E081      LDI	R24,1
    0846 9380014C  STS	KeyDown,R24
(0094) 			 KeyNew=KeyNew<<4;
    0848 9180014D  LDS	R24,KeyNew
    084A 708F      ANDI	R24,0xF
    084B 9582      SWAP	R24
    084C 9380014D  STS	KeyNew,R24
(0095) 			 KeyNew=KeyNew|i;//get key scan code
    084E 2E28      MOV	R2,R24
    084F 2A24      OR	R2,R20
    0850 9220014D  STS	KeyNew,R2
(0096) 			 return;
    0852 C003      RJMP	0x0856
    0853 9543      INC	R20
    0854 3045      CPI	R20,5
    0855 F2F0      BCS	0x0834
    0856 940E3BAC  CALL	pop_gset1
    0858 9508      RET
_Hex2Ascii:
  ascii                --> Y+0
  temp                 --> R20
  h                    --> R16
    0859 940E3BA9  CALL	push_gset1
    085B 9722      SBIW	R28,2
(0097) 			 //putchar(KeyNew);
(0098) 			}
(0099) 			 //memmove(&key_buf[0],&key_buf[1],KEY_BUF_LEN-1);   
(0100)         }//for (i=0;i<5;i++) 
(0101) }   
(0102) Hex2Ascii(unsigned char h)
(0103) {
(0104)  unsigned char ascii[2];
(0105)  unsigned char temp;
(0106)  
(0107)  temp = (h&0xf0)>>4;
    085C 2F40      MOV	R20,R16
    085D 7F40      ANDI	R20,0xF0
    085E 9542      SWAP	R20
    085F 704F      ANDI	R20,0xF
(0108)  if(temp<0x0a){ascii[0] = temp + 0x30;}
    0860 304A      CPI	R20,0xA
    0861 F420      BCC	0x0866
    0862 2F84      MOV	R24,R20
    0863 5D80      SUBI	R24,0xD0
    0864 8388      STD	Y+0,R24
    0865 C003      RJMP	0x0869
(0109)     else {ascii[0] = temp + 0x37;}
    0866 2F84      MOV	R24,R20
    0867 5C89      SUBI	R24,0xC9
    0868 8388      STD	Y+0,R24
(0110) 	
(0111)  temp = h&0x0f;
    0869 2F40      MOV	R20,R16
    086A 704F      ANDI	R20,0xF
(0112)  if(temp<0x0a){ascii[1] = temp + 0x30;}
    086B 304A      CPI	R20,0xA
    086C F420      BCC	0x0871
    086D 2F84      MOV	R24,R20
    086E 5D80      SUBI	R24,0xD0
    086F 8389      STD	Y+1,R24
    0870 C003      RJMP	0x0874
(0113)     else {ascii[1] = temp + 0x37;}
    0871 2F84      MOV	R24,R20
    0872 5C89      SUBI	R24,0xC9
    0873 8389      STD	Y+1,R24
(0114)  p = &ascii[0];
    0874 01CE      MOVW	R24,R28
    0875 9390014B  STS	p+1,R25
    0877 9380014A  STS	p,R24
    0879 9622      ADIW	R28,2
    087A 940E3BAC  CALL	pop_gset1
    087C 9508      RET
_main:
  win                  --> Y+2
    087D 972E      SBIW	R28,0xE
(0115)  //return (ascii);
(0116) }
(0117) /***********************************************************************
(0118) * 名称:main()
(0119) * 功能:主程序,用于GUI测试及演示。
(0120) ***********************************************************************/
(0121) main(void)
(0122) {   
(0123)    WINDOWS win={0, 0, 128, 32,"my", "first" };
    087E E68C      LDI	R24,0x6C
    087F E091      LDI	R25,1
    0880 01FE      MOVW	R30,R28
    0881 9632      ADIW	R30,2
    0882 E00C      LDI	R16,0xC
    0883 E010      LDI	R17,0
    0884 93FA      ST	R31,-Y
    0885 93EA      ST	R30,-Y
    0886 939A      ST	R25,-Y
    0887 938A      ST	R24,-Y
    0888 940E3BEF  CALL	asgncblk
(0124)    first_win = &win;
    088A 01CE      MOVW	R24,R28
    088B 9602      ADIW	R24,2
    088C 93900149  STS	first_win+1,R25
    088E 93800148  STS	first_win,R24
(0125)    init_devices();
    0890 DF86      RCALL	_init_devices
(0126)        
(0127)    GUI_Initialize();				// 初始化LCM 
    0891 940E0A0F  CALL	_GUI_Initialize
(0128)    GUI_SetColor(1, 0);				// 设置前景色及背景色
    0893 2722      CLR	R18
    0894 E001      LDI	R16,1
    0895 940E2A88  CALL	_GUI_SetColor
(0129)    //LCD_FillAll(0x01);
(0130)    //GUI_LoadPic(0,0, (uint8 *)ICO1, 40, 40);	// 显示40×40的图标
(0131)    //GUI_Spline(log_pin, 4, 1); 					// 画样条曲线
(0132)    //GUI_LineS(poly6, 6, 1);						// 画封闭的多边形
(0133)    //GUI_FloodFill(0,0, 1);					// 填充多边形
(0134)    GUI_PutString(0,0,"09:23 01/10/07");		// 显示字符串 
    0897 E380      LDI	R24,0x30
    0898 E091      LDI	R25,1
    0899 8399      STD	Y+1,R25
    089A 8388      STD	Y+0,R24
    089B 2722      CLR	R18
    089C 2733      CLR	R19
    089D 2700      CLR	R16
    089E 2711      CLR	R17
    089F 940E0EA9  CALL	_GUI_PutString
(0135)    //GUI_PutChar24_32(48,32,'8');
(0136)    //GUI_PutChar8_8(0,0,'8');
(0137)    //GUI_PutHZ(0,0,hz0,16,16);
(0138)    //GUI_PutNoStr(0,0,"3244",4);
(0139)    //GUI_WindowsDraw(first_win);
(0140)    //while(1);
(0141)    //return(0);
(0142)    //GUI_PutChar8_8(0,8,'p');
(0143)    //GUI_PutChar8_8(0,16,'m');
(0144)    //GUI_PutChar8_8(0,24,'s');
(0145)    GUI_DrawBat(86,0,0);
    08A1 2422      CLR	R2
    08A2 2433      CLR	R3
    08A3 8239      STD	Y+1,R3
    08A4 8228      STD	Y+0,R2
    08A5 2722      CLR	R18
    08A6 2733      CLR	R19
    08A7 E506      LDI	R16,0x56
    08A8 E010      LDI	R17,0
    08A9 940E0D82  CALL	_GUI_DrawBat
(0146)    GUI_PutChar16_16(0,8,'P');
    08AB E580      LDI	R24,0x50
    08AC 8388      STD	Y+0,R24
    08AD E028      LDI	R18,0x8
    08AE E030      LDI	R19,0
    08AF 2700      CLR	R16
    08B0 2711      CLR	R17
    08B1 940E3AB5  CALL	_GUI_PutChar16_16
(0147)    GUI_PutChar16_16(0,24,'M');
    08B3 E48D      LDI	R24,0x4D
    08B4 8388      STD	Y+0,R24
    08B5 E128      LDI	R18,0x18
    08B6 E030      LDI	R19,0
    08B7 2700      CLR	R16
    08B8 2711      CLR	R17
    08B9 940E3AB5  CALL	_GUI_PutChar16_16
(0148)    GUI_PutChar16_16(0,40,'S');
    08BB E583      LDI	R24,0x53
    08BC 8388      STD	Y+0,R24
    08BD E228      LDI	R18,0x28
    08BE E030      LDI	R19,0
    08BF 2700      CLR	R16
    08C0 2711      CLR	R17
    08C1 940E3AB5  CALL	_GUI_PutChar16_16
    08C3 C008      RJMP	0x08CC
(0149)    
(0150)    while(1)
(0151)    {
(0152)     key_scan();
    08C4 DF63      RCALL	_key_scan
(0153) 	if(KeyDown)
    08C5 9020014C  LDS	R2,KeyDown
    08C7 2022      TST	R2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -