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

📄 pro.lst

📁 数控电压源程序数控电压源程序数控电压源程序数控电压源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0675 9380006C  STS	counter,R24
    0677 3084      CPI	R24,4
    0678 E0E0      LDI	R30,0
    0679 079E      CPC	R25,R30
    067A F060      BCS	0x0687
(0467)   {
(0468)    counter=0;
    067B 2422      CLR	R2
    067C 2433      CLR	R3
    067D 9230006D  STS	counter+1,R3
    067F 9220006C  STS	counter,R2
(0469)    key_is_ok=1;
    0681 E081      LDI	R24,1
    0682 E090      LDI	R25,0
    0683 93900071  STS	key_is_ok+1,R25
    0685 93800070  STS	key_is_ok,R24
(0470)   }
(0471)   if(++AD_COUNT>=5)
    0687 9180006A  LDS	R24,AD_COUNT
    0689 9190006B  LDS	R25,AD_COUNT+1
    068B 9601      ADIW	R24,1
    068C 9390006B  STS	AD_COUNT+1,R25
    068E 9380006A  STS	AD_COUNT,R24
    0690 3085      CPI	R24,5
    0691 E0E0      LDI	R30,0
    0692 079E      CPC	R25,R30
    0693 F048      BCS	0x069D
(0472)   {
(0473)    AD_COUNT=0;
    0694 2422      CLR	R2
    0695 2433      CLR	R3
    0696 9230006B  STS	AD_COUNT+1,R3
    0698 9220006A  STS	AD_COUNT,R2
(0474)    ad_is_ok=1;
    069A E081      LDI	R24,1
    069B 93800068  STS	ad_is_ok,R24
(0475)   } 
    069D 9029      LD	R2,Y+
    069E BE2F      OUT	0x3F,R2
    069F 91E9      LD	R30,Y+
    06A0 9199      LD	R25,Y+
    06A1 9189      LD	R24,Y+
    06A2 9039      LD	R3,Y+
    06A3 9029      LD	R2,Y+
    06A4 9518      RETI
(0476)   
(0477) }
(0478)  
(0479) 
(0480) void init_devices(void)
(0481) {
(0482)  CLI(); //禁止所有中断
_init_devices:
    06A5 94F8      BCLR	7
(0483)  MCUCR  = 0x00;
    06A6 2422      CLR	R2
    06A7 BE25      OUT	0x35,R2
(0484)  GICR   = 0x00;
    06A8 BE2B      OUT	0x3B,R2
(0485)  port_init();
    06A9 DFA3      RCALL	_port_init
(0486)  Initialize_LCD();
    06AA 940E0779  CALL	_Initialize_LCD
(0487)  timer0_init();
    06AC DFAE      RCALL	_timer0_init
(0488)  adc_init();
    06AD 940E078B  CALL	_adc_init
(0489)  SEI();//开全局中断
    06AF 9478      BSET	7
    06B0 9508      RET
(0490) }
(0491) 
(0492) //主函数
(0493) 
(0494) void main(void)
(0495) {
(0496) uint i=0,keycode=16;
_main:
  keycode              --> R20
  i                    --> R20
    06B1 2744      CLR	R20
    06B2 2755      CLR	R21
    06B3 E140      LDI	R20,0x10
(0497)  init_devices();
    06B4 DFF0      RCALL	_init_devices
(0498)  //在这继续添加你的代码
(0499)  system_init();
    06B5 DA64      RCALL	_system_init
(0500)  DAC_DDR=0xff;
    06B6 EF8F      LDI	R24,0xFF
    06B7 BB87      OUT	0x17,R24
(0501)  DAC_DATA=Set_Value;
    06B8 90200076  LDS	R2,Set_Value
    06BA 90300077  LDS	R3,Set_Value+1
    06BC BA28      OUT	0x18,R2
    06BD C01C      RJMP	0x06DA
(0502) 
(0503)  while(1)
(0504)  { 
(0505)    Display_VOL();
    06BE DAAD      RCALL	_Display_VOL
(0506)    function_DAC();
    06BF DE58      RCALL	_function_DAC
(0507)    control();  
    06C0 DEE1      RCALL	_control
(0508)    signal_function();
    06C1 DD89      RCALL	_signal_function
(0509)    control();  
    06C2 DEDF      RCALL	_control
(0510)    if(key_is_ok)
    06C3 90200070  LDS	R2,key_is_ok
    06C5 90300071  LDS	R3,key_is_ok+1
    06C7 2022      TST	R2
    06C8 F411      BNE	0x06CB
    06C9 2033      TST	R3
    06CA F039      BEQ	0x06D2
(0511)    {
(0512)     read_keyvalue();
    06CB DC3B      RCALL	_read_keyvalue
(0513) 	key_is_ok=0;
    06CC 2422      CLR	R2
    06CD 2433      CLR	R3
    06CE 92300071  STS	key_is_ok+1,R3
    06D0 92200070  STS	key_is_ok,R2
(0514)    } 
(0515)    if(ad_is_ok)
    06D2 90200068  LDS	R2,ad_is_ok
    06D4 2022      TST	R2
    06D5 F021      BEQ	0x06DA
(0516)    {
(0517)     ad_is_ok=0;
    06D6 2422      CLR	R2
    06D7 92200068  STS	ad_is_ok,R2
(0518)     ADCSRA|=BIT(ADSC);
    06D9 9A36      SBI	0x06,6
    06DA CFE3      RJMP	0x06BE
    06DB 9508      RET
FILE: E:\张秋伟\我的实验\数控电压源\boxing.c
(0001) //包含所需头文件
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) #include "delay.h"
(0005) 
(0006) /*------宏定义------*/
(0007) #define uchar	unsigned char
(0008) #define uint	unsigned int
(0009) #define BYTE unsigned char 
(0010) 
(0011) #define DAC_DATA    PORTB
(0012) #define DAC_DDR     DDRB
(0013) 
(0014) extern uchar  dec_to_bin(uchar data);
(0015) 
(0016) const BYTE Sin[]={0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,
(0017)                   0x0e,0x10,0x12,0x14,0x16,0x18,0x1a,
(0018) 				  0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,
(0019) 				  0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,
(0020) 				  0x38,0x3a,0x3c,0x3d,0x3f,0x41,0x43,
(0021) 				  0x45,0x47,0x49,0x4b,0x4d,0x4f,0x51,
(0022) 				  0x53,0x54,0x56,0x58,0x5a,0x5c,0x5e,
(0023) 				  0x60,0x62,0x63,0x65,0x67,0x69,0x6b,
(0024) 				  0x6d,0x6e,0x70,0x72,0x74,0x76,0x77,
(0025) 				  0x79,0x7b,0x7d,0x7e,0x80,0x82,0x84,
(0026) 				  0x85,0x87,0x89,0x8a,0x8c,0x8e,0x8f,
(0027) 				  0x91,0x93,0x94,0x96,0x98,0x99,0x9b,
(0028) 				  0x9c,0x9e,0x9f,0xa1,0xa3,0xa4,0xa6,
(0029) 				  0xa7,0xa9,0xaa,0xac,0xad,0xaf,0xb0,
(0030) 				  0xb1,0xb3,0xb4,0xb6,0xb7,0xb9,0xba,
(0031) 				  0xbb,0xbd,0xbe,0xbf,0xc1,0xc2,0xc3,
(0032) 				  0xc4,0xc6,0xc7,0xc8,0xc9,0xcb,0xcc,
(0033) 				  0xcd,0xce,0xcf,0xd1,0xd2,0xd3,0xd4,
(0034) 				  0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,
(0035) 				  0xdd,0xde,0xde,0xdf,0xe0,0xe1,0xe2,
(0036) 				  0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe8,
(0037) 				  0xe9,0xea,0xeb,0xec,0xec,0xed,0xee,
(0038) 				  0xef,0xef,0xf0,0xf1,0xf1,0xf2,0xf3,
(0039) 				  0xf3,0xf4,0xf4,0xf5,0xf5,0xf6,0xf6,
(0040) 				  0xf7,0xf7,0xf8,0xf8,0xf9,0xf9,0xfa,
(0041) 				  0xfa,0xfa,0xfb,0xfb,0xfc,0xfc,0xfc,
(0042) 				  0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,
(0043) 				  0xfe,0xfe,0xfe,0xfe,0xff,0xff,0xff,
(0044) 				  0xff,0xff,0xff,0xff,0xff,0xff}; 
(0045) 
(0046) void saw(void)//锯齿波发生函数
(0047) {
(0048)   uchar  i,data;
(0049)   for(i=0;i<255;i++)
_saw:
  data                 --> Y+1
  i                    --> R16
    06DC 2700      CLR	R16
    06DD C002      RJMP	0x06E0
(0050)   {
(0051)    //data=dec_to_bin(i);
(0052)    DAC_DATA=i;
    06DE BB08      OUT	0x18,R16
    06DF 9503      INC	R16
    06E0 3F0F      CPI	R16,0xFF
    06E1 F3E0      BCS	0x06DE
    06E2 9508      RET
(0053)   }
(0054) }
(0055) 
(0056) void square(void)//方波发生函数
(0057) {
(0058)   DAC_DATA=0x00;
_square:
    06E3 2422      CLR	R2
    06E4 BA28      OUT	0x18,R2
(0059)   delay_nms(5000);
    06E5 E808      LDI	R16,0x88
    06E6 E113      LDI	R17,0x13
    06E7 940E010B  CALL	_delay_nms
(0060)   DAC_DATA=0xff;
    06E9 EF8F      LDI	R24,0xFF
    06EA BB88      OUT	0x18,R24
(0061)   delay_nms(5000);
    06EB E808      LDI	R16,0x88
    06EC E113      LDI	R17,0x13
    06ED 940E010B  CALL	_delay_nms
    06EF 9508      RET
_SIN:
  i                    --> R20
    06F0 940E08BE  CALL	push_gset1
(0062) }
(0063) 
(0064) void SIN(void)
(0065) {
(0066)   uchar i=0x00;
    06F2 2744      CLR	R20
(0067)   DAC_DATA=Sin[i];
    06F3 E584      LDI	R24,0x54
    06F4 E090      LDI	R25,0
    06F5 2FE4      MOV	R30,R20
    06F6 27FF      CLR	R31
    06F7 0FE8      ADD	R30,R24
    06F8 1FF9      ADC	R31,R25
    06F9 91E4      LPM	R30,0(Z)
    06FA BBE8      OUT	0x18,R30
(0068)   i++; 
    06FB 9543      INC	R20
(0069)    if(i==200) 
    06FC 3C48      CPI	R20,0xC8
    06FD F409      BNE	0x06FF
(0070)    { 
(0071)      i=0x00; 
    06FE 2744      CLR	R20
(0072)    } 
(0073)     delay_nms(5000);
    06FF E808      LDI	R16,0x88
    0700 E113      LDI	R17,0x13
    0701 940E010B  CALL	_delay_nms
    0703 940E08C1  CALL	pop_gset1
    0705 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    0706 940E08BC  CALL	push_gset2
    0708 01B8      MOVW	R22,R16
FILE: E:\张秋伟\我的实验\数控电压源\LCD1602.C
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include "delay.h"
(0004) /*
(0005)  数据口接PB口:PB0--DB0,PB1--DB1,.....PB7--DB7;
(0006)  控制总线RS--PD3 RW--PD5 EN--PD4
(0007) 
(0008) */
(0009) #define LCDPORT PORTC
(0010) #define LCDDDR DDRC
(0011) #define LCDPIN PINC
(0012) 
(0013) #define RS_CLR	PORTA&= ~(1 << PA0)
(0014) #define RS_SET	PORTA |= (1 << PA0)
(0015) 
(0016) #define RW_CLR	PORTA &= ~(1 << PA1)
(0017) #define RW_SET	PORTA |= (1 << PA1)
(0018) 
(0019) #define EN_CLR	PORTA &= ~(1 << PA2)
(0020) #define EN_SET	PORTA |= (1 << PA2)
(0021) #define Clear_Screen  Write_Command(0x01)
(0022) 
(0023) 
(0024) void delay_ms(unsigned int n)
(0025) {
(0026)  unsigned int i;
(0027)  for(i=0;i<n;i++)delay_1ms();
    0709 2744      CLR	R20
    070A 2755      CLR	R21
    070B C004      RJMP	0x0710
    070C 940E0101  CALL	_delay_1ms
    070E 5F4F      SUBI	R20,0xFF
    070F 4F5F      SBCI	R21,0xFF
    0710 1746      CP	R20,R22
    0711 0757      CPC	R21,R23
    0712 F3C8      BCS	0x070C
    0713 940E08AD  CALL	pop_gset2
    0715 9508      RET
(0028) }
(0029) 
(0030) void En_Toggle()//产生一个使能脉冲
(0031) {
(0032)  EN_CLR;        //拉低使能位,产生一个下降沿
_En_Toggle:
    0716 98DA      CBI	0x1B,2
(0033)  delay_ms(5);//保持低电平一定时间
    0717 E005      LDI	R16,5
    0718 E010      LDI	R17,0
    0719 DFEC      RCALL	_delay_ms
(0034)  EN_SET;        //拉高使能位
    071A 9ADA      SBI	0x1B,2
(0035)  delay_ms(3);//保持高电平一定时间
    071B E003      LDI	R16,3
    071C E010      LDI	R17,0
    071D DFE8      RCALL	_delay_ms
(0036)  EN_CLR;        //拉低使能位,产生一个下降沿
    071E 98DA      CBI	0x1B,2
    071F 9508      RET
(0037) }
(0038) 
(0039) /* 不断检测LCD的忙标志 (BF),直到其为0,表示可以执行下一条指令*/ 
(0040)  void Wait_Until_Ready(void)
(0041)  {
(0042)   RW_SET;     //设为读状态
_Wait_Until_Ready:
    0720 9AD9      SBI	0x1B,1
(0043)   RS_CLR;  //所读为状态位
    0721 98D8      CBI	0x1B,0
(0044)   LCDDDR&=~(1<<DDD7);//单片机设为输入,用以读取LCD的忙标志
    0722 98A7      CBI	0x14,7
(0045)   EN_SET;
    0723 9ADA      SBI	0x1B,2
(0046)   delay_ms(5);
    0724 E005      LDI	R16,5
    0725 E010      LDI	R17,0
    0726 DFDF      RCALL	_delay_ms
(0047)   while((LCDPIN&0x80)==0x80) ;    //不断循环,直至BF=0
    0727 B223      IN	R2,0x13
    0728 2433      CLR	R3
    0729 FC27      SBRC	R2,7
    072A CFFC      RJMP	0x0727
(0048)   EN_CLR;
    072B 98DA      CBI	0x1B,2
(0049)   LCDDDR|=(1<<DDD7);
    072C 9AA7      SBI	0x14,7
    072D 9508      RET
_Write_Command:
  Command              --> R20
    072E 940E08BE  CALL	push_gset1
    0730 2F40      MOV	R20,R16
(0050)  }
(0051) 
(0052)  void Write_Command(unsigned char Command)   //向LCD写入命令字
(0053)  {
(0054)   RS_CLR;        //写入的是命令 
    0731 98D8      CBI	0x1B,0
(0055)   RW_CLR;        //置为写状态
    0732 98D9      CBI	0x1B,1
(0056)   LCDDDR=0xFF;
    0733 EF8F      LDI	R24,0xFF
    0734 BB84      OUT	0x14,R24
(0057)   LCDPORT=Command;  //写命令字 
    0735 BB45      OUT	0x15,R20
(0058)   delay_ms(2);
    0736 E002      LDI	R16,2
    0737 E010      LDI	R17,0
    0738 DFCD      RCALL	_delay_ms
(0059)   En_Toggle();
    0739 DFDC      RCALL	_En_Toggle
(0060)   Wait_Until_Ready(); //等待指令执行完毕
    073A DFE5      RCALL	_Wait_Until_Ready
    073B 940E08C1  CALL	pop_gset1
    073D 9508      RET
_Write_Data:
  Data                 --> R20
    073E 940E08BE  CALL	push_gset1
    0740 01A8      MOVW	R20,R16
(0061)  } 
(0062) 
(0063) void Write_Data(unsigned int Data)
(0064) {
(0065)   RS_SET;
    0741 9AD8      SBI	0x1B,0
(0066)   RW_CLR; //写入的是数据
    0742 98D9      CBI	0x1B,1
(0067)   LCDDDR=0xFF;
    0743 EF8F      LDI	R24,0xFF
    0744 BB84      OUT	0x14,R24
(0068)   delay_ms(2);
    0745 E002      LDI	R16,2
    0746 E010      LDI	R17,0
    0747 DFBE      RCALL	_delay_ms
(0069)   LCDPORT=Data;
    0748 BB45      OUT	0x15,R20
(0070)   En_Toggle();
    0749 DFCC      RCALL	_En_Toggle
(0071)   Wait_Until_Ready();
    074A DFD5      RCALL	_Wait_Until_Ready
    074B 940E08C1  CALL	pop_gset1
    074D 9508      RET
_Write_Position:
  p                    --> R20
  colum                --> R22
  row                  --> R20
    074E 940E08BC  CALL	push_gset2
    0750 01B9      MOVW	R22,R18
    0751 01A8      MOVW	R20,R16
(0072) } 
(0073) 
(0074) void Write_Position(unsigned int row,unsigned int colum)//设字符位置
(0075) {
(0076)  unsigned char p;
(0077)   if(row==1)
    0752 3041      CPI	R20,1
    0753 E0E0      LDI	R30,0
    0754 075E      CPC	R21,R30
    0755 F441      BNE	0x075E
(0078)   {
(0079)    p=0x80+colum-1;
    0756 2F46      MOV	R20,R22
    0757 5840      SUBI	R20,0x80
    0758 4F5F      SBCI	R21,0xFF
    0759 5041      SUBI	R20,1
    075A 4050      SBCI	R21,0
(0080)    Write_Command(p);
    075B 2F04      MOV	R16,R20
    075C DFD1      RCALL	_Write_Command
(0081)    }  
    075D C007      RJMP	0x0765
(0082)    else 
(0083)      {

⌨️ 快捷键说明

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