您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页哈工大单片机实验代码(张毅刚版教材)(10个)

哈工大单片机实验代码(张毅刚版教材)(10个)

来源:五一七教育网


电路图用张毅刚版教材里给的图!

!!!

1、流水灯

#include #include 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 #include

void delay(unsigned char delay_time) {

unsigned 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 unsigned char t=20; sbit button=P3^2;

sbit yellowled=P1^0;

/* 定义接口

*/

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

#define uchar unsigned char

*/

#define uint unsigned int #define outk P1 #define out1 P0 #define out2 P2

uchar 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 允许接收PCON=0X00;

/* SMOD=0*/

EA=1; ES=1; EX1=1; EX0=1; while(1) {

outk=0x07; out1=seg[send]; out2=seg[rec]; } }

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&0x01)==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、单片机与 PC 串行通信

#include

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 0 {

unsigned char i=0; send(0x01); delay(); i++;

}

6、扩展 82c55 并行 IO 接口 #include #include

#define uchar unsigned char #define uint unsigned int

sbit rst_8255=P3^5; #define con_8255 #define pa_8255 #define pb_8255 void delay(uint); void main(void) {

uchar temp; rst_8255=1; delay(1); rst_8255=0;

con_8255=0x82;

XBYTE[0x7003] XBYTE[0x7000] XBYTE[0x7001]

/*0x7003 为 82C55 的控制寄存器地址

*/

/* 以下定义 pa、pb 的端口地址 */

void reset_8255(void);

/* 复位 */

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 unsigned char code

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; key0=P1;

先将 p1.0~P1.3 置高

if(key0!=0x0f) 如果 P1.4~P1.7 不全为 1,可能有键按下 {

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_num=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(key0==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; do{

key_num=key_scan(); P2=table[key_num]; }while(1); }

8、 1602 液晶显示 #include #include

#define uchar unsigned char #define uint unsigned int #define out P0 sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2;

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(void) {

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=out; }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(0x01); delay(1); }

void string(uchar ad,uchar *s) {

write_command(ad); while(*s>0) {

write_data(*s++); delay(100); } }

9、 DA 转换

#include

#define uchar unsigned char #define uint unsigned int #define out P1 sbit DAC_cs=P2^0; sbit DAC_wr=P2^1; 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

#define uchar unsigned char

#define uint unsigned int #define LED P0 #define out P1 sbit start=P2^1; sbit OE=P2^7; sbit EOC=P2^3; sbit CLOCK=P2^0; sbit add_a=P2^4; sbit add_b=P2^5; sbit add_c=P2^6; void main(void) {

uchar temp; add_a=0; add_b=0; add_c=0; while(1) {

start=0; start=1; start=0; while(1) {

CLOCK=!CLOCK; if(EOC==1) {

*/

break;} OE=1; temp=out; OE=0;

LED=temp;

} } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务