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

📄 me.h

📁 单片机与键盘接口程序
💻 H
字号:
#ifndef __ME51_H__
#define __ME51_H__
#define uchar unsigned char
#define uint unsigned int
/*  BYTE Register  */
sfr P0   = 0x80;		//并口P0
sfr P1   = 0x90;		//并口P1
sfr P2   = 0xA0;		//并口P2
sfr P3   = 0xB0;		//并口P3
sfr PSW  = 0xD0;		//程序状态字组
sfr ACC  = 0xE0;
sfr B    = 0xF0;
sfr SP   = 0x81;
sfr DPL  = 0x82;
sfr DPH  = 0x83;
sfr PCON = 0x87;		
	//电源控制寄存器	不可位寻址
	//PCON.7=SMOD	双倍波特率位。由定时器1产生波特率,
	//且串口工作于模式1,2,3时,SMOD=1则波特率提高一倍
	//PCON.3=GF1	由用户决定
	//PCON.2=GF0	由用户决定
	//PCON.1=PD		掉电方式位	置PD=1时,激活进入掉电工作方式
	//PCON.0=IDL	空闲方式位	置IDL=1时,激活进入空闲工作方式		只有CHMOS可以
sfr TCON = 0x88;		//定时器、计数器控制寄存器
sfr TMOD = 0x89;		//定时器、计数器方式控制寄存器
	//TMOD.7=GATE	TRx=1且GATE=1时只有INTx为高电平时才启动定时器/计数器x(硬件控制)
	//				GATE=0 TRx=1时直接启动定时器/计数器x(软件控制)
	//TMOD.6=C/T	选择定时方式或计数方式 0时定时方式,1时为计数方式
	//TMOD.5=M1		00 方式0 13位定时器	01方式1 16位定时器/计数器
	//TMOD.4=M0		10 方式2 8位自动重载定时、计数器	11方式3 16位定时器/计数器
	//TMOD.3=GATE	
	//TMOD.2=C/T	
	//TMOD.1=M1	
	//TMOD.0=M0	
sfr TL0  = 0x8A;
sfr TL1  = 0x8B;
sfr TH0  = 0x8C;
sfr TH1  = 0x8D;
sfr IE   = 0xA8;	//中断触发控制寄存器		不能位寻址
sfr IP   = 0xB8;
	//中断优先级寄存器 中断具有两级优先级,置1为高优先级 置0为低优先级
	//查询次序为 高IE0 TF0 IE1 TF1 RI、TI TF2、EXF2低
	
sfr SCON = 0x98;		//串行端口控制寄存器	
sfr SBUF = 0x99;


/*  BIT Register  */
/*  PSW   */			//程序状态字组
sbit CY   = 0xD7;		//进位标志		只读
sbit AC   = 0xD6;		//辅助进位标志	只读
sbit F0   = 0xD5;		//一般用途 由用户决定
sbit RS1  = 0xD4;		//寄存器组选择位  00 - 00H~07H 01 - 08H~0fH 10 - 10H~17H 11 - 18H~1FH
sbit RS0  = 0xD3;
sbit OV   = 0xD2;		//溢出标志		只读
sbit P    = 0xD0;		//同位标志		只读		指出累加器内1的个数为奇数个

/*  TCON  */			//定时器、计数器寄存器
sbit TF1  = 0x8F;		//定时器1溢出标志位 	由硬件置位 响应中断后由硬件清除
sbit TR1  = 0x8E;		//定时器1运行控制位	由软件置位/清除 以启动/停止计数/定时器
sbit TF0  = 0x8D;		//定时器0溢出标志位 	由硬件置位 响应中断后由硬件清除
sbit TR0  = 0x8C;		//定时器0运行控制位	由软件置位/清除 以启动/停止计数/定时器
sbit IE1  = 0x8B;		//INT1的中断标志位	当检测到INT1时 由硬件置位,响应中断后由硬件清除
sbit IT1  = 0x8A;		//INT1的触发方式控制位	置1时为下降沿触发 清0时为低电平触发
sbit IE0  = 0x89;		//INT0的中断标志位	当检测到INT0时 由硬件置位,响应中断后由硬件清除
sbit IT0  = 0x88;		//INT0的触发方式控制位	置1时为下降沿触发 清0时为低电平触发

/*  IE   */				//中断触发控制寄存器	不能位寻址
sbit EA   = 0xAF;		//中断允许、禁止位	EA=1允许中断 EA=0禁止所有中断
sbit ET2  = 0xAC;		//定时器T2中断允许位(C52)1允许
sbit ES   = 0xAC;		//串行口中断允许位
sbit ET1  = 0xAB;		//定时器、计数器T1溢出中断允许位
sbit EX1  = 0xAA;		//外部中断1中断允许位
sbit ET0  = 0xA9;		//定时器、计数器T0溢出中断允许位
sbit EX0  = 0xA8;		//外部中断0中断允许位

/*  IP   */ 
sbit PT2  = 0xBD;		//定义定时器2的中断优先级(仅C52有)
sbit PS   = 0xBC;		//定义串行口中断优先级
sbit PT1  = 0xBB;		//定义定时器1的中断优先级
sbit PX1  = 0xBA;		//定义外部中断1的中断优先级
sbit PT0  = 0xB9;		//定义定时器0的中断优先级
sbit PX0  = 0xB8;		//定义外部中断0的中断优先级

/*  P3  */
sbit RD   = 0xB7;
sbit WR   = 0xB6;
sbit T1   = 0xB5;
sbit T0   = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD  = 0xB1;
sbit RXD  = 0xB0;

/*  SCON  */			//串行端口控制寄存器	
sbit SM0  = 0x9F;		
sbit SM1  = 0x9E;
	//串行端口模式选择	
	//		模式 	说明 			波特率
	//00 	0		移位寄存器方式	fosc/12
	//01 	1		8位UART方式		可变T1溢出率/n
	//10 	2		9位UART方式		fosc/64,fosc/32
	//11 	3		9位UART方式		可变T1溢出率/n
sbit SM2  = 0x9D;
sbit REN  = 0x9C;		//串行接收允许位	1允许接收 0禁止接收
sbit TB8  = 0x9B;		//模式2、3时TB8为传送的第9个数据位
sbit RB8  = 0x9A;		//模式2、3时TB8为接收的第9个数据位
sbit TI   = 0x99;		//发送中断标志 由硬件置位 软件清除
sbit RI   = 0x98;		//接收中断标志 由硬件置位 软件清除

/*  P0  */
sbit P00=P0^0;		
sbit P01=P0^1;		
sbit P02=P0^2;		
sbit P03=P0^3;		
sbit P04=P0^4;		
sbit P05=P0^5;		
sbit P06=P0^6;		
sbit P07=P0^7;		

/*  P1  */
sbit P10=P1^0;		
sbit P11=P1^1;		
sbit P12=P1^2;		
sbit P13=P1^3;		
sbit P14=P1^4;		
sbit P15=P1^5;		
sbit P16=P1^6;		
sbit P17=P1^7;		

/*  P2  */
sbit P20=P2^0;		
sbit P21=P2^1;		
sbit P22=P2^2;		
sbit P23=P2^3;		
sbit P24=P2^4;		
sbit P25=P2^5;		
sbit P26=P2^6;		
sbit P27=P2^7;		

/*  P3  */
sbit P30=P3^0;		
sbit P31=P3^1;		
sbit P32=P3^2;		
sbit P33=P3^3;		
sbit P34=P3^4;		
sbit P35=P3^5;		
sbit P36=P3^6;		
sbit P37=P3^7;		


/* user define */

/*
struct	datestr
{
  uchar   tm_hyear;		//1900`2000h
  uchar   tm_lyear;		//1900`2000h
  uchar   tm_mon;		//01`12h
  uchar   tm_day;		//01`31h
};
*/
struct tmstr	
{
  unsigned char   tm_hyear;		//20h
  unsigned char   tm_lyear;		//00`99h
  unsigned char   tm_mon;		//01`12h
  unsigned char   tm_day;		//01`31h
  unsigned char   tm_hour;		//00`23h
  unsigned char   tm_min;		//00`59h
  unsigned char   tm_sec;		//00`59h
  unsigned char   tm_hyear1;	//1900`2000h
  unsigned char   tm_lyear1;	//1900`2000h
  unsigned char   tm_mon1;		//01`12h
  unsigned char   tm_day1;		//01`31h
  unsigned char   tm_hyear2;	//1900`2000h
  unsigned char   tm_lyear2;	//1900`2000h
  unsigned char   tm_mon2;		//01`12h
  unsigned char   tm_day2;		//01`31h
  unsigned char   tm_week;		//星期
};

#endif

⌨️ 快捷键说明

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