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

📄 ad.lst

📁 atmega16单片机AD转换源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0040 E5CF      LDI	R28,0x5F
    0041 E0D4      LDI	R29,4
    0042 BFCD      OUT	0x3D,R28
    0043 BFDE      OUT	0x3E,R29
    0044 51C0      SUBI	R28,0x10
    0045 40D0      SBCI	R29,0
    0046 EA0A      LDI	R16,0xAA
    0047 8308      STD	Y+0,R16
    0048 2400      CLR	R0
    0049 E6E0      LDI	R30,0x60
    004A E0F0      LDI	R31,0
    004B E010      LDI	R17,0
    004C 36E5      CPI	R30,0x65
    004D 07F1      CPC	R31,R17
    004E F011      BEQ	0x0051
    004F 9201      ST	R0,Z+
    0050 CFFB      RJMP	0x004C
    0051 8300      STD	Z+0,R16
    0052 E8E0      LDI	R30,0x80
    0053 E0F0      LDI	R31,0
    0054 E6A0      LDI	R26,0x60
    0055 E0B0      LDI	R27,0
    0056 E010      LDI	R17,0
    0057 38E0      CPI	R30,0x80
    0058 07F1      CPC	R31,R17
    0059 F021      BEQ	0x005E
    005A 95C8      LPM
    005B 9631      ADIW	R30,1
    005C 920D      ST	R0,X+
    005D CFF9      RJMP	0x0057
    005E 940E0383  CALL	_main
_exit:
    0060 CFFF      RJMP	_exit
_init_7279:
  tmr                  --> R20
    0061 940E044F  CALL	push_gset1
FILE: D:\AVR\AD\HD7279.C
(0001) 
(0002) /*****************************readme.txt***********************************************************
(0003) HD7279.C是AVR Mega16,8MHz的配置文件
(0004) 
(0005) 使用前必须先进行宏定义的“管脚配置”、”键值转换配置“
(0006) 
(0007) 外部调用主要有四个函数
(0008) 
(0009) #:init_7279()为7279初始化函数,在使用HD7279前必须先调用此文件
(0010) 
(0011) #:void write7279(unsigned char cmd,unsigned char dta);
(0012) 	前一个cmd为指令,可直接调用宏义中“HD7279指令集”
(0013) 	后一个dat为数据,输入0x80+i,i为显示的数字
(0014) 	
(0015) #:unsigned char read7279(void):数据读取函数
(0016) 	返回是键盘的原始值,没有进行任何转换
(0017) 	
(0018) #:unsigned char get_key7279(void):读取一个键值
(0019) 
(0020) 	调用函数后,等待按键,直到有按键按下并松开,
(0021) 	返回一个与键值对应的键值,经过数值转换
(0022) 	
(0023) 内部函数,不对用户开发;用户只须调用以上上四个函数就可以完成HD7279的基本操作
(0024) 
(0025) *****************************************************************************************************/
(0026) 
(0027) 
(0028) /********************************管脚配置*****************************/
(0029) #define WR7279 PORTC												   
(0030) #define RD7279 PINC
(0031) #define DR7279 DDRC
(0032) 
(0033) #define cs7279 BIT(1)	//cs7279定义为PC^5
(0034) #define clk7279 BIT(2) 	//clk7279定义为PC^4
(0035) #define dat7279 BIT(3)	//dat7279定义为PC^3
(0036) #define key7279 BIT(4)	//key7279定义为PC^2
(0037) 
(0038) /******************************键值转换配置********************************/
(0039) #define ONE 0X03
(0040) #define TWO 0X02
(0041) #define THREE 0X01
(0042) #define FOUR 0X00
(0043) #define FIVE 0X0B
(0044) #define SIX 0X0A
(0045) #define SEVEN 0x09
(0046) #define EIGHT 0X08
(0047) #define NINE 0X13
(0048) #define ZERO 0X12
(0049) #define AAAA 0X11     
(0050) #define BBBB 0x10     
(0051) #define CCCC 0X1B       
(0052) #define DDDD 0X1A		
(0053) #define EEEE 0X19    
(0054) #define FFFF 0X18     
(0055) 
(0056) /********************************HD7279指令集***************************/
(0057) #define CMD_RESET 0xa4		//复位(清除)指令
(0058) #define CMD_TEST 0xbf		//测试指令
(0059) #define DECODE0 0x80		//方式0译码
(0060) #define DECODE1 0xc8		//方式1译码
(0061) #define CMD_READ 0x15		//读取键盘数据指令
(0062) #define UNDECODE 0x90		//不带小数点显示
(0063) #define RTL_CYCLE 0xa3		//循环左移指令
(0064) #define RTR_CYCLE 0xa2		//循环右移指令
(0065) #define RTL_UNCYL 0xa1		//左移指令
(0066) #define RTR_UNCYL 0xa0		//右移指令
(0067) #define ACTCTL 0x98		//消隐控制
(0068) #define SEGON 0xe0		//段点亮指令	
(0069) #define SEGOFF 0xc0		//段关闭指令
(0070) #define BLINKCTL 0x88		//闪烁控制
(0071) 
(0072) 
(0073) /******************************************外部调用函数申明*********************************************/
(0074) 
(0075) /*****************************************************
(0076) 函数名:HD7279初始化函数	
(0077) 功  能:初始化HD7279(管脚配置、HD7279复位)
(0078) 输  入:无
(0079) 返  回:无
(0080) 备  注:使用HD7279之前调用此函数,并配置管脚的宏定义
(0081) ******************************************************/	
(0082) extern void init_7279(void);	  	 
(0083) 
(0084) /****************** **********************
(0085) 函数名:HD7279写入函数	
(0086) 功  能:对HD7279写数据
(0087) 输  入:cmd为指令数据;	dta为数据数据
(0088) 返  回:无
(0089) 备  注:HD7279的控制函数
(0090) ******************************************/
(0091) extern void write7279(unsigned char cmd,unsigned char dta);	//写入到HD7279
(0092) 
(0093) /****************** **********************
(0094) 函数名:HD7279读取函数	
(0095) 功  能:对HD7279读取原始键值
(0096) 输  入:无
(0097) 返  回:键盘原始键值
(0098) 备  注:HD7279的控制函数
(0099) ******************************************/
(0100) extern unsigned char read7279(void);
(0101) 
(0102) /****************** **********************
(0103) 函数名:HD7279按键等待接收函数	
(0104) 功  能:当完成一次按键,返回键值
(0105) 输  入:无
(0106) 返  回:键盘键值
(0107) 备  注:HD7279的控制函数
(0108) ******************************************/
(0109) extern unsigned char get_key7279(void);
(0110) 
(0111) /****************** **********************
(0112) 函数名:HD7279测试函数	
(0113) 功  能:对HD7279功能测试
(0114) 输  入:无
(0115) 返  回:无
(0116) 备  注:
(0117) ******************************************/
(0118) extern void test_7279(void);
(0119) 
(0120) 
(0121) 
(0122) /*******************************************内部函数申明***********************************************/
(0123) //长时延函数
(0124) extern void long_delay(void);	
(0125) //短时延函数					
(0126) extern void short_delay(void);					
(0127) //10ms时延函数
(0128) extern void delay10ms(unsigned int);			
(0129) //发送一个字节
(0130) 
(0131) /****************** **********************
(0132) 函数名:HD7279字节发送函数	
(0133) 功  能:HD7279发送一个字节
(0134) 输  入:无
(0135) 返  回:无
(0136) 备  注:HD7279硬件函数
(0137) ******************************************/
(0138) extern void send_byte(unsigned char);	
(0139) 
(0140) /****************** **********************
(0141) 函数名:HD7279字节接收函数	
(0142) 功  能:从HD7279接收一个字节
(0143) 输  入:无
(0144) 返  回:一个字节
(0145) 备  注:HD7279硬件函数
(0146) ******************************************/
(0147) extern unsigned char receive_byte(void);			
(0148) 
(0149) /****************** **********************
(0150) 函数名:HD7279按键等待接收函数	
(0151) 功  能:当完成一次按键,返回键值
(0152) 输  入:无
(0153) 返  回:键盘键值
(0154) 备  注:HD7279的控制函数
(0155) ******************************************/
(0156) extern unsigned char  num_change7279 (unsigned char X);
(0157) 
(0158) 
(0159) 
(0160) /******************************************外部调用函数*********************************************/
(0161) 
(0162) /*****************************************************
(0163) 函数名:HD7279初始化函数	
(0164) 功  能:初始化HD7279(管脚配置、HD7279复位)
(0165) 输  入:无
(0166) 返  回:无
(0167) 备  注:使用先,选配置管脚的宏定义
(0168) ******************************************************/		
(0169) extern void init_7279(void)	
(0170) {
(0171) 	unsigned int tmr;
(0172) 	
(0173) 	DR7279 |= cs7279;		//cs7279定义为输出
    0063 9AA1      SBI	0x14,1
(0174) 	DR7279 |= clk7279;		//clk7279定义为输出
    0064 9AA2      SBI	0x14,2
(0175) 	DR7279 |= dat7279;		//dat7279定义为输出
    0065 9AA3      SBI	0x14,3
(0176) 	DR7279 &= ~(key7279);		//key7279定义为输入
    0066 98A4      CBI	0x14,4
(0177) 	
(0178) 	WR7279 |= cs7279;		//cs7279初始化为1
    0067 9AA9      SBI	0x15,1
(0179)  	WR7279 |= clk7279;		//clk7279初始化为1
    0068 9AAA      SBI	0x15,2
(0180)  	WR7279 |= dat7279;		//dat7279初始化为1
    0069 9AAB      SBI	0x15,3
(0181)  	WR7279 |= key7279;		//key7279初始化为有弱上拉 
    006A 9AAC      SBI	0x15,4
(0182)  	
(0183)  	for(tmr=0;tmr<0xf000;tmr++);	//上电延时
    006B 2744      CLR	R20
    006C 2755      CLR	R21
    006D C002      RJMP	0x0070
    006E 5F4F      SUBI	R20,0xFF
    006F 4F5F      SBCI	R21,0xFF
    0070 3040      CPI	R20,0
    0071 EFE0      LDI	R30,0xF0
    0072 075E      CPC	R21,R30
    0073 F3D0      BCS	0x006E
(0184)  		
(0185) 	send_byte(CMD_RESET);		//复位HD7279
    0074 EA04      LDI	R16,0xA4
    0075 D048      RCALL	_send_byte
(0186)  		 	 		
(0187) }  	 
    0076 940E0452  CALL	pop_gset1
    0078 9508      RET
_write7279:
  dta                  --> R20
  cmd                  --> R22
    0079 940E0466  CALL	push_gset2
    007B 2F42      MOV	R20,R18
    007C 2F60      MOV	R22,R16
(0188) 
(0189) /****************** **********************
(0190) 函数名:HD7279写入函数	
(0191) 功  能:对HD7279写数据
(0192) 输  入:cmd为指令数据;	dta为数据数据
(0193) 返  回:无
(0194) 备  注:HD7279的控制函数
(0195) ******************************************/
(0196) extern void write7279(unsigned char cmd,unsigned char dta)	//写入到HD7279
(0197) {	
(0198) 	send_byte(cmd);		//写指令
    007D 2F06      MOV	R16,R22
    007E D03F      RCALL	_send_byte
(0199) 	send_byte(dta);		//定数据
    007F 2F04      MOV	R16,R20
    0080 D03D      RCALL	_send_byte
(0200) }
    0081 940E0446  CALL	pop_gset2
    0083 9508      RET
(0201) 
(0202) /****************** **********************
(0203) 函数名:HD7279读取函数	
(0204) 功  能:对HD7279读取原始键值
(0205) 输  入:无
(0206) 返  回:键盘原始键值
(0207) 备  注:HD7279的控制函数
(0208) ******************************************/
(0209) extern unsigned char read7279(void)
(0210) {
(0211) 	send_byte(0x15);	//发送读取指令
_read7279:
    0084 E105      LDI	R16,0x15
    0085 D038      RCALL	_send_byte
(0212) 	return(receive_byte());	//返回键值
    0086 C050      RJMP	_receive_byte
_get_key7279:
  KeyNum               --> R20
    0087 940E044F  CALL	push_gset1
(0213) 	
(0214) }
(0215) 
(0216) /****************** **********************
(0217) 函数名:HD7279按键等待接收函数	
(0218) 功  能:当完成一次按键,返回键值
(0219) 输  入:无
(0220) 返  回:键盘键值
(0221) 备  注:HD7279的控制函数
(0222) ******************************************/
(0223) extern unsigned char get_key7279(void)
(0224) {
(0225) 	unsigned char KeyNum;
(0226) 	while( (RD7279&key7279) );		//等待有键按下
    0089 999C      SBIC	0x13,4
    008A CFFE      RJMP	0x0089
(0227) 	
(0228) 	delay10ms(1);				//时延100ms
    008B E001      LDI	R16,1
    008C E010      LDI	R17,0
    008D D018      RCALL	_delay10ms
(0229) 	
(0230) 	KeyNum=read7279();			//读出键码	
    008E DFF5      RCALL	_read7279
(0231) 	
(0232) 	KeyNum=num_change7279(KeyNum);   	//键码转为十进制
    008F D05E      RCALL	_num_change7279
    0090 2F40      MOV	R20,R16
(0233) 	
(0234) 	delay10ms(1);				//时延100ms
    0091 E001      LDI	R16,1
    0092 E010      LDI	R17,0
    0093 D012      RCALL	_delay10ms
(0235) 	
(0236) 	while( !(RD7279&key7279) );			//等待按键松开
    0094 9B9C      SBIS	0x13,4
    0095 CFFE      RJMP	0x0094
(0237) 	
(0238) 	return KeyNum;				//返回键值
    0096 2F04      MOV	R16,R20
    0097 940E0452  CALL	pop_gset1
    0099 9508      RET
(0239) }
(0240) 

⌨️ 快捷键说明

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