AT89S52语言常用程序.doc
《AT89S52语言常用程序.doc》由会员分享,可在线阅读,更多相关《AT89S52语言常用程序.doc(30页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、一、闪烁灯#include / sbit gate=P20;/ 定义P2-0口void main(void)unsigned int i,j;while(1)for(i=500;i0;i-)for(j=500;j0;j-);/ 双重循环,延时约1秒gate=!gate;/ 对P-0口取反,控制小灯的亮灭#include #define uint unsigned intsbit gate1=P20; / 定义P2-0口sbit gate2=P21; / 定义P2-1口sbit gate3=P22; / 定义P2-2口sbit gate4=P23; / 定义P2-3口void main(void
2、)uint i,j;while(1)for(i=250;i0;i-)for(j=250;j0;j-);/ 双重循环,延时约0.2秒 gate1=!gate1;/ 对P-0口取反,控制小灯的亮灭 gate2=!gate2;/ 对P-1口取反,控制小灯的亮灭 gate3=!gate3;/ 对P-2口取反,控制小灯的亮灭 gate4=!gate4;/ 对P-3口取反,控制小灯的亮灭#include #include #define unit unsigned int#define uchar unsigned charsbit L0=P20;sbit L1=P21;sbit L2=P22;sbit
3、L3=P23;uchar data BUFFER1=0; /*定时器计数变量*/void main(void)P2=0x0f;/ 初始化端口EA=1; IT1=1; ET0=1;TMOD=0x01; /* T0方式1计时0.01秒 */TH0=-5000/256;TL0=-5000%256;TR0=1;/* 开中断,启动定时器 */for (;);/* 定时计数器0的中断服务子程序 */void intserv1(void) interrupt 1 using 1TH0=-5000/256;/ 定时器T0的高四位赋值TL0=-5000%256;BUFFER0=BUFFER0+1; / 定时器T
4、0的低四位赋值if (BUFFER0=100)/ 百分秒进位L3=!L3;L2=!L2;L1=!L1;L0=!L0;二、串口的简单测试程序# include void main(void) unsigned char astring;/*在11.0592MHz晶振下,设置串行口9600数据传输率,方式3*/TMOD=0x20; TL1=0xfd;TH1=0xfd; SCON=0xd8;PCON=0x00; /*串口接收字符RI置位,允许串口接收*/TR1=1;while(1)while(RI=0);RI=0; /*串口接收标志位的软件清零*/astring=SBUF;三、行列键盘的输入例程#i
5、nclude #include #define uchar unsigned char#define uint unsigned intvoid delays(void);uchar kbscan(void);void main(void)uchar key;while(1) key=kbscan();/*键扫描函数*/delays();/*键消抖的延时函数*/ 键消抖的延时函数void delays(void)uchar i;for(i=300;i0;i-);/ kbscan(void) 键扫描函数uchar kbscan(void) uchar sccode,recode;P1=0xf0;
6、/*发全0行扫描码,列线输入*/if(P1&0xf0)!=0xf0)/*若有键按下*/delays(); /*延时去抖动*/if(P1&0xf0)!=0xf0)sccode=0xfe;/*逐行扫描初值*/while(sccode&0x10)!=0)P1=sccode;/*输出行扫描码*/if(P1&0xf0)!=0xf0) /*本行有键按下*/recode=(P1&0xf0)|0x0f;return(sccode)+(recode); /*返回特征字节码*/else sccode=(sccode1)|0x01;/*行扫描码左移一位*/return(0);/*无键按下,返回值为0*/四、锁定键盘
7、的程序#include #include #define uchar unsigned char#define uint unsigned intvoid delays(void);uchar kbscan(void);main()bit CRT; /*密码正确标志,=1密码正确*/bit PRT; /*密码部分输入标志,=1密码部分输入*/uchar COUNT; /*计数单元,存放密码正确的位数*/uchar KEY; /*被按下的键的编码*/CRT=0;PRT=0;COUNT=0;KEY=kbscan();/*键扫描函数*/delays();/*键消抖的延时函数*/switch (KEY
8、)case 0xb7: /*0键*/if (CRT) else/*密码不正确时*/if (PRT) /*部分密码正确时*/COUNT=COUNT+1; /*密码正确的位数加1*/if (COUNT=3)/*密码所有位都正确*/CRT=1;PRT=0;COUNT=0; break;case 0x7e: /*1键*/if (CRT) /*密码正确时的操作内容*/else /*密码不正确时*/PRT=0;COUNT=0; break;case 0xbe: /*2键*/if (CRT) /*密码正确时的操作内容*/else /*密码不正确时*/if (PRT) /*部分密码正确时,说明密码错误*/ P
9、RT=0;COUNT=0;else /*密码正确位数为0时,说明密码第一位正确*/PRT=1;COUNT=1; break;case 0xd7: /*#键*/if (CRT) /*密码正确时,锁定键盘*/CRT=0;PRT=0;COUNT=0; break;/ 键消抖的延时函数void delays(void)uchar i;for(i=300;i0;i-);/ kbscan(void) 键扫描函数uchar kbscan(void) uchar sccode,recode;P1=0xf0;/*发全0行扫描码,列线输入*/if(P1&0xf0)!=0xf0)/*若有键按下*/delays();
10、 /*延时去抖动*/if(P1&0xf0)!=0xf0)sccode=0xfe;/*逐行扫描初值*/while(sccode&0x10)!=0)P1=sccode;/*输出行扫描码*/if(P1&0xf0)!=0xf0) /*本行有键按下*/recode=(P1&0xf0)|0x0f;return(sccode)+(recode); /*返回特征字节码*/else sccode=(sccode1)|0x01;/*行扫描码左移一位*/return(0);/*无键按下,返回值为0*/ 五、单片机中的多路模拟开关例程#include #include #include #include #defin
11、e uchar unsigned char#define uint unsigned int#define adch0 XBYTE0x0000sbit P1_3=P13;sbit P1_2=P12;uint ch0datal,ch0datah,i,light;void main(void)EA=1; PT0=1;/ 开外中断,并设置定时器;ET0=1;IT0=1;IT1=1;EX0=1;EX1=1;ET2=1;T2CON=0x08;TMOD=0x21;TH0=0xB9;/ 设置定时器的初值;TL0=0xB0;TR0=1;TI=1;ch0datah=0;ch0datal=0;P1_3=0;/ 设
12、置控制端口的初值;P1_2=0;while(1)/ 等待外部的控制信号;void intsvr1(void) interrupt 1/ 定时器1模拟外部控制信号的进入TH0=0xB9;TL0=0xB0;TR0=1;light=light+1;if (light1000) P1_3=!P1_3;/ MAX333的控制信号取反,工作方式变化; P1_2=!P1_2; light=0;/ 标志位显示当前的工作状态; 六、单片机控制的数码管显示#include #include #include #include #define DIGPORT XBYTE 0x8000/* 定义字位口 */#defi
13、ne WORDPORT XBYTE 0x4000/* 定义字型口 */#define uchar unsigned char/* 定义共阴极字型编码表(数字09)*/uchar code TABLE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示:得到字型和字位口的地址后,向不同的字位送数据,进行数据的显示。/ 数码管显示计数值个位uchar digit;uchar disp,delay; / 对计数值取余数main()TMOD=0x60; /* T0方式1计时0.01秒 */TH1=0;TL1=0;EA=1; ET1=0; TR1
14、=1; /* 开中断,启动定时器 */for (;)/* 数码管显示计数值低位 */digit=0x08;disp=TL1%10;DIGPORT=digit;WORDPORT=TABLEdisp;for (delay=0;delay=200;delay+);/显示其它位的数据 七、单片机的数字时钟例程#include #include #define unit unsigned int#define uchar unsigned char/*定义字型字位口*/#define DIGPORT XBYTE 0x8000#define WORDPORT XBYTE 0x4000/*定义P1口各管脚*
15、/sbit K0=P10;sbit K1=P11;sbit K2=P12;sbit BEEP=P13;sbit L0=P14;sbit L1=P15;sbit L2=P16;sbit L3=P17;uchar data BUFFER2=0,0; /*显示缓冲区(依次为低位,高位)*/uchar data CLOCK4=0,0,0,0;/*存放时钟时间(依次为百分秒,秒,分和时位)*/uchar data SECOND2=0,0;/*存放秒表时间(依次为百分秒,秒)*/uchar data REVERSE4=0,0,0,0;/*存放倒计时时间(依次为百分秒,秒,分和时位)*/*定义运行状态*/u
16、char data STATE=0;/*STATE=0,秒表*/*STATE=1,倒计时分调整*/*STATE=2,倒计时小时调整*/*STATE=3,倒计时运行*/*STATE=4 or 7,时钟运行*/*STATE=5,时钟分调整*/*STATE=6,时钟时调整*/bit bdata SND=0;/*秒表START*/bit bdata RST=0;/*秒表RESET*/bit bdata STP=0;/*倒计时STOP*/*数码管显示编码09,A,-*/uchar code TABLE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AT89S52 语言 常用 程序
限制150内