单片机C语言简单编程文档格式.docx
《单片机C语言简单编程文档格式.docx》由会员分享,可在线阅读,更多相关《单片机C语言简单编程文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
{
for(i=0;
i<
10;
i++)
{
P1=b[i];
P2=a[i];
Delay();
}
}
3、开关K1控制加,开关K2控制减,开关K3控制复位。
当减到小于0的时候再从99开始减,当加到99的时候又从0开始加。
sbitBIT1=P3^0;
sbitBIT2=P3^1;
sbitButton1=P3^7;
sbitButton2=P3^6;
sbitButton3=P3^5;
unsignedchara[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voidDelay(unsignedintt)
unsignedinti,j;
for(i=0;
t;
i++)
for(j=0;
j<
252;
j++)
{;
}//时间延迟函数的定义
chardat=0;
//有符号数
//跑马灯显示的段码
unsignedcharz;
while
(1)
for(z=0;
z<
z++)
BIT1=0;
BIT2=1;
P2=a[dat/10];
Delay(20);
P2=0xff;
//消隐,防止个位的数在十位显示,导致显示乱码
BIT1=1;
BIT2=0;
P2=a[dat%10];
//消隐
P1=b[z];
Delay(20);
//跑马灯显示
if(Button1==0)
{
dat++;
if(dat>
=99)
dat=0;
while(Button1==0);
}//按键1是控制加的,当加到大于等于99时又从0开始加
if(Button2==0)
dat--;
if(dat<
=0)
dat=99;
while(Button2==0);
}//按键2是控制减的,当减到小于等于0时再从99开始减
if(Button3==0)
dat=0;
while(Button3==0);
}
}//按键3是控制复位的,任何时候按下就归0
4、开始1、2、3、4闪烁,按一下K1,5、6、7、8闪烁,再按一下K1全部闪烁。
(课堂作业)
sbitK1=P3^0;
unsignedcharstate=0;
for(j=0;
{;
if(state==0)
P1=0xf0;
P1=0xff;
elseif(state==1)
P1=0x0f;
elseif(state==2)
P1=0x00;
if(K1==0)
state++;
if(state>
=3)
state=0;
while(K1==0);
5、先是1、2、3、4灯闪8下,再5、6、7、8灯闪8下。
循环闪烁。
(实验一2)
j=50000;
while(j--);
chari=0;
16;
if(i<
8)
P2=0Xf0;
Delay();
P2=0xff;
}
elseif(i<
16)
P2=0X0f;
6、逐个点亮8个发光二极管(第一次亮一个。
。
最后全亮,然后再重新开始)(实验一1)
}//时间按延时函数
inta[8]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
8;
P2=a[i];
Delay();
7、用中断函数控制加减用数码管显示数字。
八盏发光二极管可以根据加减控制左右移。
intrins.h>
unsignedchara[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
unsignedcharx=0xfe;
ss=0;
IT0=1;
EX0=1;
IT1=1;
EX1=1;
EA=1;
P1=x;
P2=a[ss];
if(ss>
9)
ss=0;
if(ss<
0)
ss=9;
voiddat1()interrupt0
ss++;
x=_crol_(x,1);
voiddat2()interrupt2
ss--;
x=_cror_(x,1);
8、按开关K1点亮1、2、3、4,松手灭,开关K2点亮5、6、7、8,松手灭。
SbitK1=P3^0;
SbitK2=P3^1;
Voidmain()
Whlie
(1)
If(K1==0)
P1=0xf0;
Elseif(K2==0)
P1=0x0f;
Else
P1=0xff;
9、点亮一盏灯,并使其闪烁。
SbitLED1=P1^0;
VoidDelay()
Unsignedintj;
j=50000;
whlie(j--);
LED1=0;
Delay();
LED1=1;
10、先点亮1、3、5、7灯,熄灭,再点亮2、4、6、8灯。
inta[2]={0xaa,0x55};
2;
P1=a[i];
Delay(100);
11、要求使用8个按键K1~K8,当按下按键时,用数码管显示出相应按键值(K1—1,K2—2,。
)放开时显示0。
(实验二)
sbitK2=P3^1;
sbitK3=P3^2;
sbitK4=P3^3;
sbitK5=P3^4;
sbitK6=P3^5;
sbitK7=P3^6;
sbitK8=P3^7;
if(K1==0)
P2=0xf9;
elseif(K2==0)
P2=0xa4;
elseif(K3==0)
P2=0xb0;
elseif(K4==0)
P2=0x99;
elseif(K5==0)
P2=0x92;
elseif(K6==0)
P2=0x82;
elseif(K7==0)
P2=0xf8;
elseif(K8==0)
P2=0x80;
else
P2=0xc0;
12、用中断程序K3、K4分别控制加减及发光二极管左右移动。
(实验三)实际操作
voiddelay(unsignedintt)
}//用时间延迟函数消抖
P0=x;
delay(10);
if(K3==0)
if(K4==0)
13、8051单片机主振为12MHZ,在P1^5引脚上接一个发光二极管和蜂鸣器,如用T0定时,每1S控制该灯亮一次,一直循环下去。
(实验四,用方式1,1s=10^3ms)
sbittest=P1^5;
unsignedchari=0;
TMOD=0x01;
TH0=15536/256;
TL0=15536%256;
TR0=1;
ET0=1;
while
(1);
voidsb()interrupt1
i++;
if(i>
19)
test=~test;
i=0;
14、制作一个9秒钟倒计时装置,时间由一位数码管显示,并要求使用一个按键控制倒计时的开始,当时间到0时,停止计时,并驱动蜂鸣器发声。
(实验五)
sbitK=P3^1;
ss=9;
P2=a[ss];
if(K==0)
TR0=1;
}
}
voidjk()interrupt1
{
{
i=0;
if(ss==0)
TR0=0;
test=~test;
15、用串口中断函数设计出显示自己姓名首写字母和学号,11.5200MZ、9200b/s,工作在方式1下。
voidSend(unsignedchardat)
SBUF=dat;
//发送
while(!
TI);
//等待发送完毕TI=1
TI=0;
}//发送函数
256;
}//时间延迟函数
voidUART_Init()
SCON=0x50;
//01010000串口工作在方式一
TMOD=0X20;
//00100000定时器工作在方式二
TH1=0xfd;
//初始值设定
TL1=0xfd;
//备用初始值
TR1=1;
ES=1;
//串口中断允许
}//程序初始函数
UART_Init();
//调用程序初始函数
Send('
Y'
);
J'
'
2'
//Send(0x32);
0'
//Send(0x30);
8'
//Send(0x38);
3'
//Send(0x33);
5'
//Send(0x35);
4'
//Send(0x34);
Delay(300);
}//主函数
16、利用定时器T1,在方式1的工作条件下,定时40ms,P1^0口输出的周期是80ms,晶振频率为6MHz。
sbittest=P1^0;
TMOD=0x10;
TH1=0xb1;
TL1=0xe0;
ET1=1;
EA=1;
voidsb()interrupt3
TH1=0xb1;
test=~test;
17、T0方式一定时30msT=90ms高电平30ms低电平60ms晶振频率为12MHz。
sbitTest=P1^0;
unsignedcharflag=1;
TH0=0xba;
TL0=0xd0;
voiddat()interrupt1
if(flag)
Test=0;
TH1=0x15;
TL1=0x0a;
flag=1;
Test=1;
flag=0;
18、利用定时器T1,工作方式1,从计数器端口输出100个脉冲之后,溢出产生中断并在中断后停止计数。
TMOD=0x510;
TH1=65536/256;
TL1=65536%256;
P1=0x00;
TR1=0;