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

📄 显示模块2.lst

📁 一个LED特效显示程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0018) 下载:		   
(0019) 		 PB4~7:  SPI通讯和下载端口
(0020)          PD0~1:  UART通讯口
(0021) 电机:
(0022) 		 PD2:  外中断,电机脉冲
(0023) */
(0024) 
(0025) /********************************************************
(0026)     广告屏程序第二次改版----主显示控制模块程序2.0
(0027)                
(0028) 			   1、程序采用模块化构架,提高了可读性
(0029)                2、此程序支持第二套广告屏硬件
(0030)                3、创建时间:2004年11月23日
(0031) 			   4、作者:西南科技大学 电子设计大赛第8大组
(0032)                注意:需要包括 :<disp_key.h>
(0033) 							   
(0034) ********************************************************/
(0035) 
(0036) 
(0037) 
(0038) /***************************************************
(0039)             头文件申明
(0040) ****************************************************/
(0041) 
(0042) #include<iom16v.h>
(0043) #include <macros.h>
(0044) #include "disp_key.h"
(0045) /************************************************
(0046)             宏定义
(0047) **************************************************/
(0048) //RAM
(0049) #define ALE  7                   //定义锁存脚
(0050) #define WE   6                   //定义写允许位
(0051) #define RE   5                   //定义读允许位
(0052) 
(0053) 
(0054) #pragma interrupt_handler exi_int0:2   	//外部中断
(0055) #pragma interrupt_handler timer1_vof:9   	//定时器1中断
(0056) #pragma  interrupt_handler usart_rcx:12   //USART接受中断
(0057) /************************************************
(0058)             全局变量申明
(0059) **************************************************/
(0060) //基本全局变量
(0061) int sys_cont =0;
(0062) //显示缓冲区
(0063) char DispTemp[8];
(0064) char Head[3];
(0065) //按键处理
(0066) 
(0067) //数脉冲
(0068) int PDataY =0;
(0069) int PDataYMax =154;
(0070) int PDataYMin =4;
(0071) 
(0072) //UART接收数据
(0073) char FileEnd =1;
(0074) char HeadLoad =0;
(0075) char HeadEN =1;
(0076) int  DataIndex =0;
(0077) int  FileLength =0;
(0078) 
(0079) //特效处理
(0080) char DispModel =0;
(0081) int  ModelDelayTime =0;
(0082) char ModelContJuge=0;
(0083) /************************************************
(0084)              函数申明
(0085) **************************************************/
(0086) //基本初始化
(0087) void port_int(void);
(0088) void timer_int(void);
(0089) void uart_int(void);
(0090) void device_int(void);
(0091) 
(0092) //按键显示事件处理
(0093) void Display_event(void);        //显示事件
(0094) void KEY_event(void);            //按键事件处理
(0095) 
(0096) //特效处理
(0097) void Disp_Model(void);           //屏幕显示特效模式
(0098) 
(0099) //外部RAM读写操作
(0100) void data_store(char data);
(0101) char RAM_Read(int adress);
(0102) void RAM_Write(int adress,char data);
(0103) 
(0104) //显示屏数据发送
(0105) void Screen_send(void);
(0106) void SPI_data_send(unsigned char send_data);
(0107) 
(0108) //UART收发数据
(0109) void uart_TX(unsigned char data);
(0110) 
(0111) //中断函数
(0112) void exi_int0(void);
(0113) void timer1_vof(void);
(0114) void usart_rcx(void);
(0115) /*************************************************
(0116) *             子函数区                           *
(0117) *                                                *
(0118) *************************************************/
(0119) 
(0120) /****************************************
(0121)           端口定义
(0122) ****************************************/
(0123) void port_int(void)
(0124) {
(0125)      DDRA =0XFF;
_port_int:
    0276 EF8F      LDI	R24,0xFF
    0277 BB8A      OUT	0x1A,R24
(0126) 	 PORTA =0XFF;
    0278 BB8B      OUT	0x1B,R24
(0127) 	 DDRB =0B00001110;
    0279 E08E      LDI	R24,0xE
    027A BB87      OUT	0x17,R24
(0128) 	 PORTB =0XFF;
    027B EF8F      LDI	R24,0xFF
    027C BB88      OUT	0x18,R24
(0129) 	 DDRC =0XFF;
    027D BB84      OUT	0x14,R24
(0130) 	 PORTC =0XFF;
    027E BB85      OUT	0x15,R24
(0131) 	 DDRD  = 0xF8;	        //
    027F EF88      LDI	R24,0xF8
    0280 BB81      OUT	0x11,R24
(0132)  	 PORTD = 0XFF;
    0281 EF8F      LDI	R24,0xFF
    0282 BB82      OUT	0x12,R24
    0283 9508      RET
(0133) }
(0134) 
(0135) /****************************************
(0136)           定时器
(0137) ****************************************/
(0138) void timer_int(void)
(0139) { 
(0140)      TCCR1B = 0x00; //stop
_timer_int:
    0284 2422      CLR	R2
    0285 BC2E      OUT	0x2E,R2
    0286 940E053F  CALL	0x53F
(0141)  	 TCNT1H = 0xd4; //setup
(0142)  	 TCNT1L = 0xce;
(0143)  	 TCCR1A = 0x00;
    0288 BC2F      OUT	0x2F,R2
(0144)  	 TCCR1B = 0x01; //start Timer
    0289 E081      LDI	R24,1
    028A BD8E      OUT	0x2E,R24
(0145)      TIMSK = 0x04;
    028B E084      LDI	R24,4
    028C BF89      OUT	0x39,R24
    028D 9508      RET
(0146) 
(0147) }
(0148) 
(0149) /****************************************
(0150)           外中断
(0151) ****************************************/
(0152) void exit_int(void)
(0153) {
(0154)      GICR  = 0x40; 
_exit_int:
    028E E480      LDI	R24,0x40
    028F BF8B      OUT	0x3B,R24
(0155)   	 MCUCR = 0x02;
    0290 E082      LDI	R24,2
    0291 BF85      OUT	0x35,R24
    0292 9508      RET
(0156) 
(0157) }
(0158) 
(0159) /****************************************
(0160)           串口通讯
(0161) ****************************************/
(0162) void uart_int(void)
(0163) {
(0164)       UCSRB = 0x00; //disable while setting baud rate
_uart_int:
    0293 2422      CLR	R2
    0294 B82A      OUT	0x0A,R2
(0165)       UCSRA = 0x00;
    0295 B82B      OUT	0x0B,R2
(0166)       UCSRC = 0x00;
    0296 BC20      OUT	0x20,R2
(0167)       UBRR =5;    //设置波特率115200
    0297 E085      LDI	R24,5
    0298 B989      OUT	0x09,R24
(0168)       UCSRB = 0x9c;
    0299 E98C      LDI	R24,0x9C
    029A B98A      OUT	0x0A,R24
(0169)       UCSRC = 0xB6;
    029B EB86      LDI	R24,0xB6
    029C BD80      OUT	0x20,R24
    029D 9508      RET
(0170) }
(0171) 
(0172) /****************************************
(0173)           器件初始化函数
(0174) ****************************************/
(0175) void device_int(void)
(0176) {
(0177)      CLI();
_device_int:
    029E 94F8      BCLR	7
(0178)    	 port_int();
    029F DFD6      RCALL	_port_int
(0179)    	 timer_int();
    02A0 DFE3      RCALL	_timer_int
(0180)    	 exit_int();
    02A1 DFEC      RCALL	_exit_int
(0181)    	 uart_int();
    02A2 DFF0      RCALL	_uart_int
(0182) 	 SEI(); 
    02A3 9478      BSET	7
    02A4 9508      RET
(0183) }
(0184) 
(0185) /****************************************
(0186)           串口收发数据
(0187) ****************************************/
(0188) void uart_TX(unsigned char data)
(0189) {
(0190)     UCSRA |=0X40;         //标志清零
_uart_TX:
  data                 --> R16
    02A5 9A5E      SBI	0x0B,6
(0191) 	UDR =data;
    02A6 B90C      OUT	0x0C,R16
    02A7 9508      RET
_SPI_data_send:
  count                --> R20
  send_data            --> R22
    02A8 D1F7      RCALL	push_gset2
    02A9 2F60      MOV	R22,R16
(0192) }
(0193) 
(0194) /***************************************************
(0195)                向显示屏送数据
(0196) ***************************************************/
(0197) 
(0198) void SPI_data_send(unsigned char send_data)       //向595送数据串
(0199) {  
(0200)    unsigned char count;
(0201)    for(count =0;count<8;count++)
    02AA 2744      CLR	R20
    02AB C010      RJMP	0x02BC
(0202)    {
(0203)       if(((send_data<<count)&0x80 )==0)
    02AC 2F06      MOV	R16,R22
    02AD 2F14      MOV	R17,R20
    02AE D23F      RCALL	lsl8
    02AF 2F80      MOV	R24,R16
    02B0 7880      ANDI	R24,0x80
    02B1 F421      BNE	0x02B6
(0204) 	     PORTC &= 0b01111111;      	   			   //送 data
    02B2 B385      IN	R24,0x15
    02B3 778F      ANDI	R24,0x7F
    02B4 BB85      OUT	0x15,R24
    02B5 C001      RJMP	0x02B7
(0205)       else
(0206) 	     PORTC |= 0b10000000;
    02B6 9AAF      SBI	0x15,7
(0207) 	  PORTD |=0b00001000;        				   //送SCK信号
    02B7 9A93      SBI	0x12,3
(0208)       PORTD &=0b11110111;
    02B8 B382      IN	R24,0x12
    02B9 7F87      ANDI	R24,0xF7
    02BA BB82      OUT	0x12,R24
    02BB 9543      INC	R20
    02BC 3048      CPI	R20,0x8
    02BD F370      BCS	0x02AC
    02BE D1D9      RCALL	pop_gset2
    02BF 9508      RET
_Screen_send:
  i                    --> R20
    02C0 D1E1      RCALL	push_gset1
(0209)    }
(0210) }
(0211) void Screen_send(void)
(0212) {
(0213)     char i;
(0214) 	PORTD &= 0b11101111;       //送RCK信号,底电平                
    02C1 B382      IN	R24,0x12
    02C2 7E8F      ANDI	R24,0xEF
    02C3 BB82      OUT	0x12,R24
(0215) 	for(i =0;i <8;i++)
    02C4 2744      CLR	R20
    02C5 C007      RJMP	0x02CD
(0216) 	{
(0217) 	    SPI_data_send(DispTemp[i]);  
    02C6 EF8B      LDI	R24,0xFB
    02C7 E092      LDI	R25,2
    02C8 940E053A  CALL	0x53A
    02CA 8100      LDD	R16,Z+0
    02CB DFDC      RCALL	_SPI_data_send
    02CC 9543      INC	R20
    02CD 3048      CPI	R20,0x8
    02CE F3B8      BCS	0x02C6
(0218)     }
(0219) 	PORTD |= 0b00010000;       //关闭RCK信号,高电平
    02CF 9A94      SBI	0x12,4
    02D0 D1D4      RCALL	pop_gset1
    02D1 9508      RET
(0220) 
(0221) }
(0222) /**************************************************
(0223) 			 数据接受,外部RAM读写
(0224) ****************************************************/
(0225) //写外部RAM
(0226) void RAM_Write(int adress,char data)
(0227) {
(0228)    PORTD |=0B11100000;           //关ALE  读关闭  写关闭
_RAM_Write:
  data                 --> R18
  adress               --> R16
    02D2 940E04F4  CALL	<created procedures>
(0229)    DDRA =0XFF;
(0230)    PORTA =adress&0xff;
(0231)    PORTC =(adress >>8)&0xff;
(0232)    PORTD &=0b01111111;                         
(0233)    PORTD &=0b10111111;
    02D4 7B8F      ANDI	R24,0xBF
    02D5 BB82      OUT	0x12,R24
(0234)    PORTA =data;
    02D6 BB2B      OUT	0x1B,R18
    02D7 9508      RET
(0235) }
(0236) //读外部RAM
(0237) char RAM_Read(int adress)
(0238) {
(0239)    PORTD |=0B11100000;           //关ALE  读关闭  写关闭
_RAM_Read:
  adress               --> R16
    02D8 940E04F4  CALL	<created procedures>
(0240)    DDRA =0XFF;
(0241)    PORTA =adress&0xff;
(0242)    PORTC =(adress >>8)&0xff;
(0243)    PORTD &=0b01111111;                         
(0244)    PORTD &=0b11011111;
    02DA 7D8F      ANDI	R24,0xDF
    02DB BB82      OUT	0x12,R24
(0245)    DDRA =0;
    02DC 2422      CLR	R2
    02DD BA2A      OUT	0x1A,R2
(0246)    return PINA;
    02DE B309      IN	R16,0x19
    02DF 9508      RET
_data_store:
  data                 --> R20
    02E0 D1C1      RCALL	push_gset1
    02E1 2F40      MOV	R20,R16
(0247) }
(0248) //存储数据到外部RAM
(0249) 
(0250) void data_store(char data)
(0251) {
(0252)    if((data ==76) &&(FileEnd ==1))     //数据起始位检测
    02E2 344C      CPI	R20,0x4C
    02E3 F479      BNE	0x02F3
    02E4 91800085  LDS	R24,FileEnd
    02E6 3081      CPI	R24,1
    02E7 F459      BNE	0x02F3
(0253)    {
(0254)        HeadEN =1;                           //开启头文件数据传输
    02E8 E081      LDI	R24,1
    02E9 93800087  STS	HeadEN,R24
(0255) 	   HeadLoad =0;                         //头文件指针清零
    02EB 2422      CLR	R2
    02EC 92200086  STS	HeadLoad,R2
(0256) 	   DataIndex =0;                        //存储数据指针清零

⌨️ 快捷键说明

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