哈工大单片机实验代码张毅刚教材个_第1页
哈工大单片机实验代码张毅刚教材个_第2页
哈工大单片机实验代码张毅刚教材个_第3页
哈工大单片机实验代码张毅刚教材个_第4页
哈工大单片机实验代码张毅刚教材个_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电路图用张毅刚版教材里给的图!1、流水灯#include<reg52.h>#include<intrins.h>void delay() unsigned char i,j; for(i=0;i<255;i+) for(j=0;j<255;j+);void main() P2=0xfe; while(1) P2=_crol_(P2,1); delay(); 2、 单个外部中断#include<reg52.h>#include<intrins.h>void delay(unsigned char delay_time) unsigned

2、 int i,j; for(i=0;i<=delay_time;i+) for(j=0;j<=100;j+);void init_tx() EA=1; EX0=1; IT0=0;void main() P1=0x00; init_tx(); delay(200); while(1) P1=P1;delay(200); void tx0() interrupt 0 P1=0xfe; while(!INT0) P1=_crol_(P1,1);delay(200); P1=0xff;3、 定时器#include<reg52.h>unsigned char t=20;sbit

3、button=P32;sbit yellowled=P10; /*定义接口*/void main() TMOD=0x01; /*选择中断方式*/ EA=1; ET0=1; TH0=0x3c; TL0=0x0b; while(button=0) TR0=1; yellowled=1;void tx() interrupt 1 TH0=0x3c; TL0=0xb0; t-; if(t=0) yellowled=yellowled; t=20; 4、 双机串行通信#include<reg51.h>#define uchar unsigned char#define uint unsign

4、ed int#defineoutk P1#define out1 P0#define out2 P2uchar code seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;uchar key,send,rec;uchar scan(void);void delay(unit);void main(void) TMOD=0X20; /*设置定时器T1为方式2*/ TH1=0XF2; /*给定时器T1赋初值*/ TH1=0XF2; TR1=1; /*接通定时器T1*/ SCON=0X50; /*串行口方式1,REN=1允许接收*/

5、 PCON=0X00; /* SMOD=0*/ EA=1; ES=1; EX1=1; EX0=1; while(1) outk=0x07; out1=segsend; out2=segrec; uchar scan(void) uchar k=10,m,n,in; delay(10); outk=0x07; if(outk&0x07)!=0x07) for(m=0;m<3;m+) outk=(0x01<<(m+3); for(n=0;n<3;n+) in=outk; in=in>>n; if(in&0x01)=0) if(in&0x0

6、1)=0) k=n+m*3;break; if(k!=10)break; return(k);void delay(uint j) uchar i; for(;j>0;j-) i=250; while(-i); i=249; while(-i); void ext0()interrupt 0 EX0=0; key=scan(); if(key!=10)send=key+1; EX0=1;void ext1()interrupt 2 ES=0; SBUF=send; while(!TI); TI=0; ES=1;void com()interrupt 4 RI=0; rec=SBUF;5、

7、单片机与PC串行通信#include <reg51.h>void send(unsigned char dat)SBUF=dat;while(TI=0);TI=0;void init_tx()EA=1;EX0=1;void delay(void)unsigned char m,n;for(m=0;m<250;m+)for(n=0;n<250;n+);void main(void)init_tx();TMOD=0x20;SCON=0x40;PCON=0x00;TH1=0xfd;TL1=0xfd;TR1=1;while(1);void tx0() interrupt 0un

8、signed char i=0;send(0x01); delay();i+;6、扩展82c55并行IO接口#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned intsbit rst_8255=P35;#define con_8255 XBYTE0x7003 /*0x7003为82C55的控制寄存器地址*/#define pa_8255 XBYTE0x7000 /*以下定义pa、pb的端口地址*/#define pb_8255 XBYTE0x7001voi

9、d reset_8255(void);void delay(uint);void main(void) uchar temp; rst_8255=1; /*复位*/ delay(1); rst_8255=0; con_8255=0x82; while(1) temp=pb_8255; /*锁存*/ pa_8255=temp; void delay(uint j) /*延时函数*/ uchar i;for(;j>0;j-) i=250; while(-i); i=249; while(-i);7、 矩阵键盘#include<reg51.h>unsigned char code

10、table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;void delay() unsigned char i,j; (延时) for(i=0;i<=25;i+) for(j=0;j<=25;j+);unsigned char key_scan() unsigned char key0,key1; unsigned char key_num=0; P1=0x0f; 先将p1.0P1.3置高 key0=P1; if(key0!=0x0f) 如果P1.4P1.7不全为1

11、,可能有键按下 delay(); key0=P1; if(key0!=0x0f) P1=0xf0; key1=P1; if(key0=0x0e) switch(key1) case 0xe0: key_num=0;break; case 0xd0: key_num=1;break; case 0xb0: key_num=2;break; case 0x70: key_num=3;break; default: key_num=0;break; else if(key0=0x0d) switch(key1) case 0xe0: key_num=4;break; case 0xd0: key_n

12、um=5;break; (处理5号键) case 0xb0: key_num=6;break; case 0x70: key_num=7;break; default: key_num=0;break; (无效按键,如多个键同时按下) else if(key0=0x0b) switch(key1) case 0xe0: key_num=8;break; case 0xd0: key_num=9;break; case 0xb0: key_num=10;break; case 0x70: key_num=11;break; default: key_num=0;break; else if(ke

13、y0=0x07) switch(key1) case 0xe0: key_num=12;break; case 0xd0: key_num=13;break; case 0xb0: key_num=14;break; case 0x70: key_num=15;break; default: key_num=0;break; return key_num;void main() unsigned char key_num;dokey_num=key_scan();P2=tablekey_num;while(1); 8、1602液晶显示#include<reg51.h>#includ

14、e<intrins.h>#define uchar unsigned char#define uint unsigned int#define out P0sbit RS=P20;sbit RW=P21;sbit E=P22;void lcd_initial(void);void check_busy(void);void write_command(uchar com);void write_data(uchar dat);void string(uchar ad,uchar *s);void lcd_test(void);void delay(uint);void main(v

15、oid) lcd_initial();while(1) string(0x82,"Hello Welcome"); string(0xC2,"To China"); delay(100); write_command(0x01); delay(100);void delay(uint j) uchar i=250; for(;j>0;j-) while(-i); i=249; while(-i); i=250; void check_busy(void) uchar dt;do dt=0xff; E=0; RS=0; RW=1; E=1; dt=o

16、ut;while(dt&0x80);E=0;void write_command(uchar com) check_busy();E=0;RS=0;RW=0;out=com;E=1;_nop_();E=0;delay(1);void write_data(uchar dat) check_busy();E=0;RS=1;RW=0;out=dat;E=1;_nop_();E=0;delay(1);void lcd_initial(void) write_command(0x3c);write_command(0x0C);write_command(0x14);write_command(

17、0x01);delay(1);void string(uchar ad,uchar *s) write_command(ad);while(*s>0) write_data(*s+); delay(100);9、DA转换#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define out P1sbit DAC_cs=P20;sbit DAC_wr=P21;void main(void) uchar temp,i=255; while(1) out=temp; DAC_cs=0; /*片选端,芯片被选中*/ DAC_wr=0; /*选通,并被锁存*/ DAC_cs=1; /*以下开始转换*/ DAC_wr=1; temp+; while(-i); /*延时函数!,老师帮改的*/ 10、AD转换#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define LED P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论