1、单片机实验一 驱动数码管#include sbit add=P20;sbit min=P21;sbit beg=P22;sbit cs =P27;sbit wor=P30;unsigned char tab10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void delay(unsigned char ms) unsigned int i,j; for(i=0;ims;i+) for(j=0;j9) i=0; if(min=0) delay(10); if(min=0) while(min=0); i-; if(i0) i=9; ret
2、urn i;void main () unsigned char i,j; j=0; cs=1; while(1) j=key(j); P0=tabj; /显示设定的数 if(beg=0) for(i=0;i=j;i+) delay(500); P0=tabi; wor=0; while(add=1&min=1&beg=1) P0=tabj; delay(100); cs=cs; cs=1; wor=1; 实验二 键盘扫描#include #define uint unsigned int #define uchar unsigned char int xx=0; / sbit key =P2
3、0; char code seg 17 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff; char code duan4 = 0x01,0x02,0x04,0x08; char num4 = 16,16,16,16; void delay_ms(unsigned char ms ) int i; int j; for (i=0;ims;i+) for (j=0;j=0;i-) P2=duani; j=numi; if(j!=16) P0=segj; delay_ms(1
4、0); void main () char i,k; begain: P0=seg0; P2= 0x01; /初始化显示 for(i=0;i0;k-) numk=numk-1; num0=i; display(); i=keyscan(); 实验三 中断#include sbit yell=P20;sbit gree=P21;sbit red=P22;void delay (int ms) int i,j; for(i=0;ims;i+) for(j=0;j240;j+); void main() IE=0x85; IP=0x04; TCON=0x05; while(1) yell=yell;
5、 delay(200);void intt0() interrupt 0 char i; yell=1; red =0; gree=1; for(i=0;i10;i+) delay(200); red=red; red =1;void intt1() interrupt 2 char i; yell=1; gree =0; red =1; for(i=0;i10;i+) delay(200); gree=gree; gree =1;实验四 串行口通信发送#include void main() TMOD =0X20; /串口工作于方式1,定时器1工作于方式2 TH1 = 0XFA; TL1 =
6、 0XFA; SCON = 0x50; /不倍增,波特率4800 PCON = 0; TR1 = 1; while(1) SBUF=P1; while(TI=0); TI=0;接收#include void main() TMOD =0X20; /串口工作于方式1,定时器1工作于方式2 TH1 = 0XFA; TL1 = 0XFA; SCON = 0x50; /不倍增,波特率4800 PCON = 0; TR1 = 1; while(1) P2=SBUF; while(RI=0); RI=0; /接受 实验六 步进马达#include #define uint unsigned int#def
7、ine uchar unsigned charuchar code TAB= 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09;sbit go = P30;sbit back = P31;sbit fast = P02;sbit slow = P03;sbit stop = P34;uchar N = 10;void Delay(uint ms) uchar i; while(ms-) for(i=0;i120;i+); void SETP_MOTOR_GO(char N) /正传 uchar j; for(j=0;j0;j-) if(go = 0|stop =
8、0) break; P1 = TABj; Delay(N); void main() IE = 0X85; TCON = 0X05; P3=0xff; while(1) if(go = 0) while(back=1&stop=1) P0 = 0xfe; SETP_MOTOR_GO(N); else if(back = 0) while(go=1&stop=1) P0 = 0xfd; SETP_MOTOR_BACK(N); else P0 = 0xef; P1 = 0x03; void intfast() interrupt 0 /减速程序 IE = 0; /关中断 N+; if(N20) N
9、=20; fast=0; Delay(50); IE = 0X85; /打开中断void intslow() interrupt 2 /加速程序 IE = 0; N-; if(N=1) N=1; slow=0; Delay(50); IE = 0X85;实验七 倒计时60#include sbit key=P10;sbit rst=P11;sbit led=P17;char code seg 10 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned int num=0,second=60;void delay(unsigne
10、d char ms) unsigned char i,j; for(i=0;ims;i+) for(j=0;j120;j+); void main() begain: second=60; IE=0X8A; /开定时器0 TMOD = 0X21; /设置为模式1 TH0 =(65536-50000)/256; TL0 =(65536-50000)%256; TR0=0; /开始计数 while(1) if(key=0) TR0=TR0; /停止 开始 计数切换 / delay(10); while(key=0); /等待松手 if(rst=0) goto begain; P2=0x01; P0
11、=segsecond/10; delay(20); P2=0x02; P0=segsecond%10; delay(20); /显示 void T0_1(void) interrupt 1 TH0 =(65636-50000)/256; TL0 =(65636-50000)%256; /重新赋值 num+; if(+num=20) led=led; num=0; second-; if(second=0) second=60; 实验八 LED动态扫描#include code char right8=0x18,0x3C,0x7E,0xFF,0x3C,0x3C,0x3C,0x3C;code ch
12、ar left8 =0x3C,0x3C,0x3C,0x3C,0xFF,0x7E,0x3C,0x18;code char up8 =0x3C,0x3C,0x3C,0x3C,0xFF,0x7E,0x3C,0x18;code char down8 =0x18,0x3C,0x7E,0xFF,0x3C,0x3C,0x3C,0x3C;sbit upkey = P30;sbit downkey = P31;sbit leftkey = P32;sbit rightkey = P33;void delay(char ms) char i,j; for(i=0;ims;i+) for(j=0;j120;j+);
13、 void rightmove(char ms) char x,y,i,j; x=0x80; for(j=0;j=8;j+) y=x; for(i=0;i9;i+) P2=y; P1=righti; y=2*y; delay(10); P1= 0xff; P2= 0; x=x/2; delay(ms); void leftmove(char ms) char x,y,i,j; x=1; for(j=0;j=8;j+) y=x; for(i=0;i9;i+) P2=y; P1=lefti; y=2*y; delay(10); P1= 0xff; P2= 0; x=2*x; delay(ms);
14、void upmove(char ms) char x,y,i,j; x=1; for(j=0;j=8;j+) y=x; for(i=0;i9;i+) P1=y; P2=upi; y=2*y; delay(10); P2= 0xff; P2= 0; x=2*x; delay(ms); void downmove(char ms) char x,y,i,j; x=0x80; for(j=0;j=8;j+) y=x; for(i=0;i9;i+) P1=y; P2=downi; y=2*y; delay(10); P2= 0xff; P2= 0; x=x/2; delay(ms); void main() while(1) if(upkey=0) while(downkey=1&leftkey=1&rightkey=1) upmove(10); if(downkey=0) while(upkey=1&leftkey=1&rightkey=1) downmove(10); if(leftkey=0) while(downkey=1&upkey=1&rightkey=1) leftmove(10); if(rightkey=0) while(downkey=1&leftkey=1&upkey=1) rightmove(10);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1