外国酷炫网站,口碑营销案例及分析,wordpress启动插件出错,注册公司流程和费用注册资金各位CSDN的uu们你们好呀#xff0c;小雅兰又来啦#xff0c;刚刚学完静态数码管显示和动态数码管显示#xff0c;感觉真不错呢#xff0c;下面#xff0c;小雅兰就要开始学习模块化编程以及LCD1602调试工具的知识了#xff0c;让我们进入51单片机的世界吧#xff01;小雅兰又来啦刚刚学完静态数码管显示和动态数码管显示感觉真不错呢下面小雅兰就要开始学习模块化编程以及LCD1602调试工具的知识了让我们进入51单片机的世界吧 模块化编程
LCD1602调试工具 模块化编程 右键点击Open document REGX52.H 就会显示出此头文件的内容这句代码的意思也就是把这部分内容拷贝到此文件下 /*-------------------------------------------------------------------------- AT89X52.H Header file for the low voltage Flash Atmel AT89C52 and AT89LV52. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved. --------------------------------------------------------------------------*/ #ifndef __AT89X52_H__ #define __AT89X52_H__ /*------------------------------------------------ Byte Registers ------------------------------------------------*/ sfr P0 0x80; sfr SP 0x81; sfr DPL 0x82; sfr DPH 0x83; sfr PCON 0x87; sfr TCON 0x88; sfr TMOD 0x89; sfr TL0 0x8A; sfr TL1 0x8B; sfr TH0 0x8C; sfr TH1 0x8D; sfr P1 0x90; sfr SCON 0x98; sfr SBUF 0x99; sfr P2 0xA0; sfr IE 0xA8; sfr P3 0xB0; sfr IP 0xB8; sfr T2CON 0xC8; sfr T2MOD 0xC9; sfr RCAP2L 0xCA; sfr RCAP2H 0xCB; sfr TL2 0xCC; sfr TH2 0xCD; sfr PSW 0xD0; sfr ACC 0xE0; sfr B 0xF0; /*------------------------------------------------ P0 Bit Registers ------------------------------------------------*/ sbit P0_0 0x80; sbit P0_1 0x81; sbit P0_2 0x82; sbit P0_3 0x83; sbit P0_4 0x84; sbit P0_5 0x85; sbit P0_6 0x86; sbit P0_7 0x87; /*------------------------------------------------ PCON Bit Values ------------------------------------------------*/ #define IDL_ 0x01 #define STOP_ 0x02 #define PD_ 0x02 /* Alternate definition */ #define GF0_ 0x04 #define GF1_ 0x08 #define SMOD_ 0x80 /*------------------------------------------------ TCON Bit Registers ------------------------------------------------*/ sbit IT0 0x88; sbit IE0 0x89; sbit IT1 0x8A; sbit IE1 0x8B; sbit TR0 0x8C; sbit TF0 0x8D; sbit TR1 0x8E; sbit TF1 0x8F; /*------------------------------------------------ TMOD Bit Values ------------------------------------------------*/ #define T0_M0_ 0x01 #define T0_M1_ 0x02 #define T0_CT_ 0x04 #define T0_GATE_ 0x08 #define T1_M0_ 0x10 #define T1_M1_ 0x20 #define T1_CT_ 0x40 #define T1_GATE_ 0x80 #define T1_MASK_ 0xF0 #define T0_MASK_ 0x0F /*------------------------------------------------ P1 Bit Registers ------------------------------------------------*/ sbit P1_0 0x90; sbit P1_1 0x91; sbit P1_2 0x92; sbit P1_3 0x93; sbit P1_4 0x94; sbit P1_5 0x95; sbit P1_6 0x96; sbit P1_7 0x97; sbit T2 0x90; /* External input to Timer/Counter 2, clock out */ sbit T2EX 0x91; /* Timer/Counter 2 capture/reload trigger dir ctl */ /*------------------------------------------------ SCON Bit Registers ------------------------------------------------*/ sbit RI 0x98; sbit TI 0x99; sbit RB8 0x9A; sbit TB8 0x9B; sbit REN 0x9C; sbit SM2 0x9D; sbit SM1 0x9E; sbit SM0 0x9F; /*------------------------------------------------ P2 Bit Registers ------------------------------------------------*/ sbit P2_0 0xA0; sbit P2_1 0xA1; sbit P2_2 0xA2; sbit P2_3 0xA3; sbit P2_4 0xA4; sbit P2_5 0xA5; sbit P2_6 0xA6; sbit P2_7 0xA7; /*------------------------------------------------ IE Bit Registers ------------------------------------------------*/ sbit EX0 0xA8; /* 1Enable External interrupt 0 */ sbit ET0 0xA9; /* 1Enable Timer 0 interrupt */ sbit EX1 0xAA; /* 1Enable External interrupt 1 */ sbit ET1 0xAB; /* 1Enable Timer 1 interrupt */ sbit ES 0xAC; /* 1Enable Serial port interrupt */ sbit ET2 0xAD; /* 1Enable Timer 2 interrupt */ sbit EA 0xAF; /* 0Disable all interrupts */ /*------------------------------------------------ P3 Bit Registers (Mnemonics Ports) ------------------------------------------------*/ sbit P3_0 0xB0; sbit P3_1 0xB1; sbit P3_2 0xB2; sbit P3_3 0xB3; sbit P3_4 0xB4; sbit P3_5 0xB5; sbit P3_6 0xB6; sbit P3_7 0xB7; sbit RXD 0xB0; /* Serial data input */ sbit TXD 0xB1; /* Serial data output */ sbit INT0 0xB2; /* External interrupt 0 */ sbit INT1 0xB3; /* External interrupt 1 */ sbit T0 0xB4; /* Timer 0 external input */ sbit T1 0xB5; /* Timer 1 external input */ sbit WR 0xB6; /* External data memory write strobe */ sbit RD 0xB7; /* External data memory read strobe */ /*------------------------------------------------ IP Bit Registers ------------------------------------------------*/ sbit PX0 0xB8; sbit PT0 0xB9; sbit PX1 0xBA; sbit PT1 0xBB; sbit PS 0xBC; sbit PT2 0xBD; /*------------------------------------------------ T2CON Bit Registers ------------------------------------------------*/ sbit CP_RL2 0xC8; /* 0Reload, 1Capture select */ sbit C_T2 0xC9; /* 0Timer, 1Counter */ sbit TR2 0xCA; /* 0Stop timer, 1Start timer */ sbit EXEN2 0xCB; /* Timer 2 external enable */ sbit TCLK 0xCC; /* 0Serial clock uses Timer 1 overflow, 1Timer 2 */ sbit RCLK 0xCD; /* 0Serial clock uses Timer 1 overflow, 1Timer 2 */ sbit EXF2 0xCE; /* Timer 2 external flag */ sbit TF2 0xCF; /* Timer 2 overflow flag */ /*------------------------------------------------ T2MOD Bit Values ------------------------------------------------*/ #define DCEN_ 0x01 /* 1Timer 2 can be configured as up/down counter */ #define T2OE_ 0x02 /* Timer 2 output enable */ /*------------------------------------------------ PSW Bit Registers ------------------------------------------------*/ sbit P 0xD0; sbit F1 0xD1; sbit OV 0xD2; sbit RS0 0xD3; sbit RS1 0xD4; sbit F0 0xD5; sbit AC 0xD6; sbit CY 0xD7; /*------------------------------------------------ Interrupt Vectors: Interrupt Address (Number * 8) 3 ------------------------------------------------*/ #define IE0_VECTOR 0 /* 0x03 External Interrupt 0 */ #define TF0_VECTOR 1 /* 0x0B Timer 0 */ #define IE1_VECTOR 2 /* 0x13 External Interrupt 1 */ #define TF1_VECTOR 3 /* 0x1B Timer 1 */ #define SIO_VECTOR 4 /* 0x23 Serial port */ #define TF2_VECTOR 5 /* 0x2B Timer 2 */ #define EX2_VECTOR 5 /* 0x2B External Interrupt 2 */ #endif 下面我们来把之前的动态数码管显示的代码模块化一下~~
小雅兰一共是把这些代码封装成了五个文件 Delay.h的内容 #ifndef __DELAY_H__
#define __DELAY_H__void Delay(unsigned char xms);#endif Delay.c的内容 #include REGX52.Hvoid Delay(unsigned char xms) //12.000MHz
{unsigned char data i, j;while(xms){i 2;j 239;do{while (--j);} while (--i);xms--;}
} Nixie.h的内容 #ifndef __NIXIE_H__
#define __NIXIE_H__void Nixie(unsigned char Location,unsigned char Number);#endif Nixie.c的内容 #include REGX52.H
#include Delay.h
unsigned char NixieTable[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,unsigned char Number)
{switch(Location){case 1:P2_41;P2_31;P2_21;break;case 2:P2_41;P2_31;P2_20;break;case 3:P2_41;P2_30;P2_21;break;case 4:P2_41;P2_30;P2_20;break;case 5:P2_40;P2_31;P2_21;break;case 6:P2_40;P2_31;P2_20;break;case 7:P2_40;P2_30;P2_21;break;case 8:P2_40;P2_30;P2_20;break;}P0NixieTable[Number];Delay(1);P00x00;
} main.c的内容 #include REGX52.H
#include Nixie.h
void main()
{while(1){Nixie(1,1);Nixie(2,2);Nixie(3,3);Nixie(4,4);Nixie(5,5);Nixie(6,6);}
}LCD1602调试工具 LCD1602.c的内容 #include REGX52.H//引脚配置
sbit LCD_RSP2^6;
sbit LCD_RWP2^5;
sbit LCD_ENP2^7;
#define LCD_DataPort P0//函数定义
/*** brief LCD1602延时函数12MHz调用可延时1ms* param 无* retval 无*/
void LCD_Delay()
{unsigned char i, j;i 2;j 239;do{while (--j);} while (--i);
}/*** brief LCD1602写命令* param Command 要写入的命令* retval 无*/
void LCD_WriteCommand(unsigned char Command)
{LCD_RS0;LCD_RW0;LCD_DataPortCommand;LCD_EN1;LCD_Delay();LCD_EN0;LCD_Delay();
}/*** brief LCD1602写数据* param Data 要写入的数据* retval 无*/
void LCD_WriteData(unsigned char Data)
{LCD_RS1;LCD_RW0;LCD_DataPortData;LCD_EN1;LCD_Delay();LCD_EN0;LCD_Delay();
}/*** brief LCD1602设置光标位置* param Line 行位置范围1~2* param Column 列位置范围1~16* retval 无*/
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{if(Line1){LCD_WriteCommand(0x80|(Column-1));}else if(Line2){LCD_WriteCommand(0x80|(Column-10x40));}
}/*** brief LCD1602初始化函数* param 无* retval 无*/
void LCD_Init()
{LCD_WriteCommand(0x38);//八位数据接口两行显示5*7点阵LCD_WriteCommand(0x0c);//显示开光标关闪烁关LCD_WriteCommand(0x06);//数据读写操作后光标自动加一画面不动LCD_WriteCommand(0x01);//光标复位清屏
}/*** brief 在LCD1602指定位置上显示一个字符* param Line 行位置范围1~2* param Column 列位置范围1~16* param Char 要显示的字符* retval 无*/
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char)
{LCD_SetCursor(Line,Column);LCD_WriteData(Char);
}/*** brief 在LCD1602指定位置开始显示所给字符串* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param String 要显示的字符串* retval 无*/
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)
{unsigned char i;LCD_SetCursor(Line,Column);for(i0;String[i]!\0;i){LCD_WriteData(String[i]);}
}/*** brief 返回值X的Y次方*/
int LCD_Pow(int X,int Y)
{unsigned char i;int Result1;for(i0;iY;i){Result*X;}return Result;
}/*** brief 在LCD1602指定位置开始显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~65535* param Length 要显示数字的长度范围1~5* retval 无*/
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(iLength;i0;i--){LCD_WriteData(Number/LCD_Pow(10,i-1)%100);}
}/*** brief 在LCD1602指定位置开始以有符号十进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围-32768~32767* param Length 要显示数字的长度范围1~5* retval 无*/
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
{unsigned char i;unsigned int Number1;LCD_SetCursor(Line,Column);if(Number0){LCD_WriteData();Number1Number;}else{LCD_WriteData(-);Number1-Number;}for(iLength;i0;i--){LCD_WriteData(Number1/LCD_Pow(10,i-1)%100);}
}/*** brief 在LCD1602指定位置开始以十六进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~0xFFFF* param Length 要显示数字的长度范围1~4* retval 无*/
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i,SingleNumber;LCD_SetCursor(Line,Column);for(iLength;i0;i--){SingleNumberNumber/LCD_Pow(16,i-1)%16;if(SingleNumber10){LCD_WriteData(SingleNumber0);}else{LCD_WriteData(SingleNumber-10A);}}
}/*** brief 在LCD1602指定位置开始以二进制显示所给数字* param Line 起始行位置范围1~2* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~1111 1111 1111 1111* param Length 要显示数字的长度范围1~16* retval 无*/
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{unsigned char i;LCD_SetCursor(Line,Column);for(iLength;i0;i--){LCD_WriteData(Number/LCD_Pow(2,i-1)%20);}
}LCD1602.h的内容 #ifndef __LCD1602_H__
#define __LCD1602_H__//用户调用函数
void LCD_Init();
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char);
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String);
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);#endifmain.c的内容 #include REGX52.H
#include LCD1602.hvoid main()
{LCD_Init();LCD_ShowChar(1,1,K);LCD_ShowString(1,3,Hello);LCD_ShowNum(1,9,123,3);LCD_ShowSignedNum(1,13,-66,2);LCD_ShowHexNum(2,1,0xA8,2);LCD_ShowBinNum(2,4,0xAA,8);while(1){}
} 这个调试工具还是非常方便的 好啦小雅兰的模块化编程和LCD1602调试工具的内容就到这里啦还要继续加油
文章转载自: http://www.morning.nrfqd.cn.gov.cn.nrfqd.cn http://www.morning.ckhpg.cn.gov.cn.ckhpg.cn http://www.morning.qkqhr.cn.gov.cn.qkqhr.cn http://www.morning.gkxyy.cn.gov.cn.gkxyy.cn http://www.morning.qyqmj.cn.gov.cn.qyqmj.cn http://www.morning.yfqhc.cn.gov.cn.yfqhc.cn http://www.morning.rjfr.cn.gov.cn.rjfr.cn http://www.morning.frxsl.cn.gov.cn.frxsl.cn http://www.morning.ynjhk.cn.gov.cn.ynjhk.cn http://www.morning.zypnt.cn.gov.cn.zypnt.cn http://www.morning.cqrenli.com.gov.cn.cqrenli.com http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn http://www.morning.sgfnx.cn.gov.cn.sgfnx.cn http://www.morning.qctsd.cn.gov.cn.qctsd.cn http://www.morning.ffhlh.cn.gov.cn.ffhlh.cn http://www.morning.rqxhp.cn.gov.cn.rqxhp.cn http://www.morning.hrtfz.cn.gov.cn.hrtfz.cn http://www.morning.tsrg.cn.gov.cn.tsrg.cn http://www.morning.kryr.cn.gov.cn.kryr.cn http://www.morning.pghfy.cn.gov.cn.pghfy.cn http://www.morning.kzdwt.cn.gov.cn.kzdwt.cn http://www.morning.fxzgw.com.gov.cn.fxzgw.com http://www.morning.trqhd.cn.gov.cn.trqhd.cn http://www.morning.hbpjb.cn.gov.cn.hbpjb.cn http://www.morning.wktbz.cn.gov.cn.wktbz.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.qpnb.cn.gov.cn.qpnb.cn http://www.morning.dbcw.cn.gov.cn.dbcw.cn http://www.morning.spxsm.cn.gov.cn.spxsm.cn http://www.morning.qhrdx.cn.gov.cn.qhrdx.cn http://www.morning.jlgjn.cn.gov.cn.jlgjn.cn http://www.morning.zdxss.cn.gov.cn.zdxss.cn http://www.morning.ygqhd.cn.gov.cn.ygqhd.cn http://www.morning.ktmpw.cn.gov.cn.ktmpw.cn http://www.morning.rqknq.cn.gov.cn.rqknq.cn http://www.morning.kdbcx.cn.gov.cn.kdbcx.cn http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn http://www.morning.zfqdt.cn.gov.cn.zfqdt.cn http://www.morning.jspnx.cn.gov.cn.jspnx.cn http://www.morning.trhlb.cn.gov.cn.trhlb.cn http://www.morning.gwsdt.cn.gov.cn.gwsdt.cn http://www.morning.qlwfz.cn.gov.cn.qlwfz.cn http://www.morning.dsprl.cn.gov.cn.dsprl.cn http://www.morning.ffdyy.cn.gov.cn.ffdyy.cn http://www.morning.lsnnc.cn.gov.cn.lsnnc.cn http://www.morning.cznsq.cn.gov.cn.cznsq.cn http://www.morning.zryf.cn.gov.cn.zryf.cn http://www.morning.ykrkq.cn.gov.cn.ykrkq.cn http://www.morning.hympq.cn.gov.cn.hympq.cn http://www.morning.wklyk.cn.gov.cn.wklyk.cn http://www.morning.srzhm.cn.gov.cn.srzhm.cn http://www.morning.rsqpc.cn.gov.cn.rsqpc.cn http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn http://www.morning.fgppj.cn.gov.cn.fgppj.cn http://www.morning.rnxs.cn.gov.cn.rnxs.cn http://www.morning.syglx.cn.gov.cn.syglx.cn http://www.morning.tkcct.cn.gov.cn.tkcct.cn http://www.morning.kfyjh.cn.gov.cn.kfyjh.cn http://www.morning.dwgcx.cn.gov.cn.dwgcx.cn http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn http://www.morning.jjzjn.cn.gov.cn.jjzjn.cn http://www.morning.nlgnk.cn.gov.cn.nlgnk.cn http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn http://www.morning.rpwm.cn.gov.cn.rpwm.cn http://www.morning.sgbss.cn.gov.cn.sgbss.cn http://www.morning.nrlsg.cn.gov.cn.nrlsg.cn http://www.morning.rbrd.cn.gov.cn.rbrd.cn http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn http://www.morning.pqypt.cn.gov.cn.pqypt.cn http://www.morning.mztyh.cn.gov.cn.mztyh.cn http://www.morning.qsmch.cn.gov.cn.qsmch.cn http://www.morning.ldsgm.cn.gov.cn.ldsgm.cn http://www.morning.sh-wj.com.cn.gov.cn.sh-wj.com.cn http://www.morning.hffjj.cn.gov.cn.hffjj.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.playmi.cn.gov.cn.playmi.cn http://www.morning.jcfg.cn.gov.cn.jcfg.cn http://www.morning.mgmqf.cn.gov.cn.mgmqf.cn http://www.morning.tpssx.cn.gov.cn.tpssx.cn