ImageVerifierCode 换一换
格式:DOCX , 页数:55 ,大小:26.01KB ,
资源ID:11268410      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11268410.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(AT89S52语言常用程序.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

AT89S52语言常用程序.docx

1、AT89S52语言常用程序一、闪烁灯#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口v

2、oid main(void)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

3、;sbit L2=P22;sbit 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;BUFF

4、ER0=BUFFER0+1; / 定时器T0的低四位赋值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; /*串口接收标志位的软件清零*/as

5、tring=SBUF;三、行列键盘的输入例程#include #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) uc

6、har sccode,recode;P1=0xf0; /*发全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;/*行扫描码左移一位*/

7、return(0); /*无键按下,返回值为0*/四、锁定键盘的程序#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(); /*

8、键扫描函数*/delays(); /*键消抖的延时函数*/ switch (KEY) 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 (C

9、RT) /*密码正确时的操作内容*/ else /*密码不正确时*/ if (PRT) /*部分密码正确时,说明密码错误*/ PRT=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) uc

10、har sccode,recode;P1=0xf0; /*发全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; /*行扫描码左移一位*

11、/return(0); /*无键按下,返回值为0*/ 五、单片机中的多路模拟开关例程#include #include #include #include #define 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; T2C

12、ON=0x08; TMOD=0x21; TH0=0xB9; / 设置定时器的初值; TL0=0xB0; TR0=1; TI=1; ch0datah=0; ch0datal=0; P1_3=0; / 设置控制端口的初值; 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

13、; / 标志位显示当前的工作状态; 六、单片机控制的数码管显示#include #include #include #include #define DIGPORT XBYTE 0x8000 /* 定义字位口 */#define WORDPORT XBYTE 0x4000 /* 定义字型口 */#define uchar unsigned char/* 定义共阴极字型编码表(数字09)*/uchar code TABLE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示:得到字型和字位口的地址后,向不同的字位送数据,进行数据的显示。/

14、 数码管显示计数值个位uchar digit;uchar disp,delay; / 对计数值取余数main() TMOD=0x60; /* T0方式1计时0.01秒 */ TH1=0; TL1=0; EA=1; ET1=0; TR1=1; /* 开中断,启动定时器 */ for (;) /* 数码管显示计数值低位 */ digit=0x08; disp=TL1%10; DIGPORT=digit; WORDPORT=TABLEdisp; for (delay=0;delay=200;delay+); /显示其它位的数据 七、单片机的数字时钟例程#include #include #defin

15、e unit unsigned int#define uchar unsigned char/*定义字型字位口*/#define DIGPORT XBYTE 0x8000#define WORDPORT XBYTE 0x4000/*定义P1口各管脚*/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; /*存放时钟

16、时间(依次为百分秒,秒,分和时位)*/uchar data SECOND2=0,0; /*存放秒表时间(依次为百分秒,秒)*/uchar data REVERSE4=0,0,0,0; /*存放倒计时时间(依次为百分秒,秒,分和时位)*/*定义运行状态*/uchar 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

17、 RST=0; /*秒表RESET*/bit bdata STP=0; /*倒计时STOP*/*数码管显示编码09,A,-*/uchar code TABLE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x40;void display(void) uchar i; /*显示缓冲区首址*/ uchar delay; /*显示延时*/ uchar disp; /*显示内容*/ uchar digit; /*定义数码管显示位*/ digit=0x08; for (i=0;i100) disp=BUFFERi%10+10; else

18、 disp=BUFFERi%10; DIGPORT=digit; WORDPORT=TABLEdisp; for (delay=0;delay1; disp=BUFFERi/10; DIGPORT=digit; WORDPORT=TABLEdisp; for (delay=0;delay1; void timer0(void) interrupt 1 using 1 /*重置定时初值*/ TH0=-5000/256; TL0=-5000%256; /*时钟处理*/ CLOCK0=CLOCK0+1; if (CLOCK0=50) & (STATE=4) L0=!L0; if (CLOCK0=10

19、0) if (STATE=4) L0=!L0; CLOCK0=0; CLOCK1=CLOCK1+1; if (CLOCK1=60) CLOCK1=0; CLOCK2=CLOCK2+1; if (CLOCK2=60) CLOCK2=0; CLOCK3=CLOCK3+1; if (CLOCK3=24) CLOCK3=0; void timer2(void) interrupt 5 using 3 TF2=0; TH2=-5000/256; TL2=-5000%256; /*秒表处理*/ if (STATE=0) SECOND0=SECOND0+1; if (SECOND0=50) L1=!L1;

20、if (SECOND0=100) L1=!L1; SECOND0=0; SECOND1=SECOND1+1; if (SECOND1=100) SECOND1=0; /*倒计时处理*/ if (STATE=3) REVERSE0=REVERSE0+1; if (REVERSE0=50) L2=!L2; if (REVERSE0=100) L2=!L2; REVERSE0=0; REVERSE1=REVERSE1+1; if (REVERSE1=60) REVERSE1=00; REVERSE2=REVERSE2-1; if (REVERSE2=0) & (REVERSE3=0) TR2=0;

21、STP=1; BEEP=0; else if (REVERSE2=0xff) REVERSE2=59; REVERSE3=REVERSE3-1; void intsvr1(void) interrupt 2 using 2 if (STATE=5) CLOCK2=CLOCK2+1; if (CLOCK2=60) CLOCK2=0; if (STATE=6) CLOCK3=CLOCK3+1; if (CLOCK3=24) CLOCK3=0; void timer1(void) interrupt 3 using 3 if (STATE=0) if (RST) SECOND0=0; SECOND1

22、=0; L1=1; RST=0; else if (SND) TR2=1; else L1=1; TR2=0; RST=1; SND=!SND; else if (STATE=1) REVERSE2=REVERSE2+1; if (REVERSE2=60) REVERSE2=0; else if (STATE=2) REVERSE3=REVERSE3+1; if (REVERSE3=24) REVERSE3=0; else if (STP) BEEP=1; L2=1; STP=0; else TR2=0; void main(void) uchar stabak; /*上一次程序运行的状态*/

23、 P1=0x0f; EA=1; IT1=1; ET0=1; TMOD=0x61; /*T1方式2计数,T0方式1计时*/ TH0=-5000/256; TL0=-5000%256; TH1=0xff; TL1=0xff; T2CON=0; TH2=-5000/256; TL2=-5000%256; K0=1; K1=1; K2=1; STATE=P1&0x07; stabak=STATE; for (;) switch (STATE) case 0: /*STATE=0,秒表*/ EX1=0; ET1=1; ET2=1; TR1=1; SND=1; L1=1; L0=0; L2=0; SECOND0=0; SECOND1=0; break; case 1: /*STATE=1,倒计时分调整*/ EX1=0; ET1=1; ET2=1; TR1=1; TR2=0; L2=1; L0=0; L1=0; REVERSE0=0; REVERSE1=0; break; case 2: /*STATE=2,倒计时小时调整*/ EX1=0; ET1=1; ET2=1; TR1=1; TR2=0; L2=1; L0=0; L1=0; REVERSE0=0; REVERSE1=0; break;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1