单片机最终完整版.docx
- 文档编号:15455201
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:87
- 大小:29.79KB
单片机最终完整版.docx
《单片机最终完整版.docx》由会员分享,可在线阅读,更多相关《单片机最终完整版.docx(87页珍藏版)》请在冰点文库上搜索。
单片机最终完整版
单片机
1.控制8只led,每1秒闪亮一次,利用定时器实现1秒定时。
2.发光二极管从左向右依次1、3闪亮,2、4闪亮,5、7闪亮,6、8闪亮,中间时间间隔500ms,然后为左四个点亮,600ms后熄灭,右四个点亮,500ms后熄灭,循环上述方式。
3.在P.0端口上接一个发光二极管,发光二极管不停的闪烁,一亮一灭的时间间隔为0.4s(相同意思:
闪烁周期为1秒,占空比40%)
4.8个发光二极管显示0-200进制值,中间间隔为400ms,循环显示。
5.8个发光二极管,依次点亮从右到左间隔400ms,然后停留2s后熄灭,然后从左到右依次点亮,间隔800ms,然后停留3s后熄灭,停止。
6.将单片机的I/O接口连接到一排发光二极管上,使得这排二极管由中间向两端依次点亮,全亮后,保持2s钟,然后,再由中间向两端熄灭,要求每次动作时间间隔为200ms,重复上述过程。
7.P1接一排二极管上,使一排二极管有两端向中间依次点亮,然后再由两边至中间熄灭,熄灭后保持30秒,再依次循环,要求每次动作间隔0.7s,重复上述方式。
8.P1接一排二极管上,四个一组同时由左到右,点亮持续2s,再由右向左依次熄灭,要求每次动作时间间隔为500ms,重复上述方式。
9.P1接一排二极管上,由低位到高位,第一次前两位闪烁点亮5次,间隔500ms后,轮到下两位闪烁点亮4次,间隔500ms后,轮到下两位闪烁点亮3次,间隔500ms后轮到下两位闪烁点亮2次,间隔500ms,循环上述方式。
10.应用单片机内部定时器T0的工作方式1,输入周期为2s的方波脉冲信号,利用发光二极管显示输出上述位置。
按键+二极管
11.连接两个按键,发光二极管全亮,按一个按键时,8个led从左到右熄灭,间隔800ms,按另一个时,8个led从右到左熄灭,间隔600ms。
12.K0按下,流水灯由左向右显示,K1按下,流水灯停止显示。
利用4个独立按键控制led点亮
13.主程序执行时,8个led从左到右点亮,当外部中断(按键作为中断源)执行中断,8个led亮灭一次后,左右各四个led同时亮灭,然后执行主程序。
数码管
14.数码管循环显示99-00的减1计数(利用定时器完成)。
15.连接电路实现数码管显示b,c,d,E,F,H,然后数码管左移显示,c,d,E,F,H,b,依次循环,两次后再循环右移的,两次后回到原点静止。
数码管+按键
16.主程序四个动态数码管显示变量,外部中断0使变量加1,外部中断1使变量减1,初值2345,按键作为中断源。
17.数码管动态显示00,每次按K1键加1,每次按K2键减1,每次按K3键清0,按K4键则显示99。
18.2位数码管为动态显示,4*4矩阵键盘的对应值0-15。
19.数码管显示0000FFFF循环,按1后,停止到当前显示的数值,按2后,从0000FFFF重新开始循环。
数码管+按键+定时器
20.数码管0-60s定时按键K1后,时间清零,重新定时,按K2后,时间减10s,继续定时,按K3后,时间加10s,继续定时。
21.主程序数码管显示50,当外部中断0产生后,执行中断子程序,数码管数值每隔1s加1,中断1产生后,停止计时,中断源为按键。
数码管+按键+定时器+蜂鸣器
22.数码管初值000,定时器定时,1s加1加到60s时,蜂鸣器响,按K0后蜂鸣器停止。
串口通信
23.PC发给单片机0X30,单片机显示0X30,发给PCOK!
,并点亮8个发光二极管。
LCD
24.LCD1602第一行第3位位置,开始显示testhappy!
按K1后LCD清屏,按K2后第一行2位置显示hurryup!
第二行2位置显示goodluck!
25.日,时,分,秒,加点的时间显示
26.
利用单片机的定时功能制作一个时钟,起始显示时间为12:
32:
01,用数码管进行显示,设置2个按键,一个清零键,另一个按键当第一次按下时,时钟停止同时发出间歇式响声,再次按下时时钟正常运行,蜂鸣器停止。
27.
K1从左向右流水K2从右向左流水K3从左向右逐个点亮K4交替亮灭1S后交替灭亮
28.
由低到高每次俩个点亮闪烁5次转到下俩个闪烁5次
29.
led一个闪2次,俩个闪三次…..
30.
LED显示0--100进制数:
31.
K1按下,流水从左到右。
K2按下,停止
32.
利用定时器控制8个led闪烁
33.
利用6位动态数码管,显示移位数字,独立式按键K1,K2,K3,K4分别表示1,2,3,4按下相应按键,数码管显示相应数值。
每次按下的键值将在最低位(最右侧数码管)显示,同时将原有显示的数值左移。
34.
由单片机内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次,P1口的P1.0-1.7分别接8个发光二极管。
编写程序模拟一时序控制装置。
上电后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒钟L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始一直循环下去
35.
利用线反转扫描矩阵键盘,方法为:
同时令四列为0,扫描行线是否有低电平,如有,说明有按键按下,记录下当前的行值,然后,将四行置0,查找按键按下所在的列,记录键值,将键值送显示,显示电路利用数码管动态扫描显示,位选2位数码管显示键值为0-15.
36.
编制一个循环闪烁的程序,有8个发光二极管,由低位到高位每次每个灯闪烁点亮3次(间隔600ms)后,转到下两位闪烁3次,循环不止。
37.
单片机端口所接的8个发光二极管依次从左到右循环点亮,当按键K1按下时,左四位发光二极管点亮,其余熄灭,当按键K2按下时,右四位发光二极管点亮,其余熄灭,当按键K3按下时,8个发光二极管闪烁,时间间隔为500ms。
(备注:
当按下按键时,需复位)
1-24练习题
1:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uintaa=0;
voidmain(void)
{SP=0X30;
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
TH0=15536/256;
TL0=15536%256;
while
(1)
{}
}
voidyichuzhongduan0()interrupt1using3//溢出中断0;2015114
{TH0=15536/256;
TL0=15536%256;
aa++;
P0=0;
if(aa==20)
{P0=0xff;aa=0;}
}
2:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uintaa=0;
voidmain(void)
{SP=0X30;
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
TH0=15536/256;
TL0=15536%256;
while
(1)
{}
}
voidyichuzhongduan0()interrupt1using3//溢出中断0;2015114
{TH0=15536/256;
TL0=15536%256;
aa++;
P0=0;
if(aa==10)
P0=0x05;
if(aa==20)
P0=0x0A;
if(aa==30)
P0=0x50;
if(aa==40)
P0=0xA0;
if(aa==50)
P0=0x0f;
if(aa==60)
P0=0x00;
if(aa==70)
P0=0xf0;
if(aa==80)
{P0=0x00;
aa=0;}
}
3:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
uintaa=0;
voidmain(void)
{SP=0X30;
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
TH0=15536/256;
TL0=15536%256;
while
(1)
{}
}
voidyichuzhongduan0()interrupt1using3//溢出中断0;2015114
{TH0=15536/256;
TL0=15536%256;
aa++;
P0=0;
if(aa>=8)
P0=0xff;
if(aa==20)
aa=0;
}
4:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharaa=0;
voids(uintt);
voidxianshi();
ucharcodet[16]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
ucharcodewei[8]={0x00,0x01,0x02,0x03,
0x04,0x05,0x06,0x07};
ucharshu[8];
ucharh=0;//为什么不能用uint类型?
voidmain(void)
{SP=0X30;
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
TH0=15536/256;
TL0=15536%256;
while
(1)
{shu[5]=t[h/100];
shu[6]=t[h/10%10];
shu[7]=t[h%10];
xianshi();
}}
voidxianshi()//数码管显示
{ucharr;
for(r=0;r<8;r++)//先段码后位码
{P1=wei[r];
P0=shu[r];s
(1);}
}
voids(uintt)//延时函数
{uintx,y;
for(y=0;y for(x=0;x<120;x++);//1ms } voidyichuzhongduan0()interrupt1using3//溢出中断0;2015114 {TH0=15536/256; TL0=15536%256; aa++; if(aa==8) {h--;aa=0; } if(h==0) h=200; } 5: #include unsignedcharcodetable1[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; unsignedcharcodetable2[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; voidmain() { unsigneda,b; TMOD=0x10; TH1=15536/256; TL1=15536%256; TR1=1; while (1) { if(TF1==1) { TF1=0; a++; TH1=15536/256; TL1=15536%256; if(a==8) { a=0; b++; P0=table2[b]; if(b==8) { b=0; a=9; } } if(a==49) { a=33; b++; P0=table1[b]; if(b==8) { b=0; a=50; } } if(a==110) { a=0; } } } } 6: #include unsignedcharcodetable1[]={0x00,0x18,0x3c,0x7e,0xff}; unsignedcharcodetable2[]={0xff,0xe7,0xc3,0x81,0x00}; voidmain() { unsigneda,b; TMOD=0x10; TH1=15536/256; TL1=15536%256; TR1=1; while (1) { if(TF1==1) { TF1=0; a++; TH1=15536/256; TL1=15536%256; if(a==4) { a=0; b++; P0=table1[b]; if(b==4) { b=0; a=5; } } if(a==45) { a=41; b++; P0=table2[b]; if(b==4) { b=0; a=0; } } } } } 7: #include unsignedcharcodetable[]={0x00,0x81,0xc3,0xe7,0xff}; unsignedcharcodetable1[]={0xff,0x7e,0x3c,0x18,0x00}; voidmain() { unsigneda,b; TMOD=0x10; TH1=15536/256; TL1=15536%256; TR1=1; while (1) { if(TF1==1) { TF1=0; a++; TH1=15536/256; TL1=15536%256; if(a==14) { a=0; b++; P1=table[b]; if(b==4) { b=0; a=29; } } if(a==29) { a=15; b++; P1=table1[b]; if(b==4) { b=0; a=30; } } if(a==630) { a=0; } } } } 8: #include unsignedcharcodetable[]={0x00,0x0f,0x1f,0x3f,0x7f,0xff}; unsignedcharcodetable1[]={0xff,0x7f,0x3f,0x1f,0x0f,0x00}; voidmain() { unsigneda,b; TMOD=0x10; TH1=15536/256; TL1=15536%256; TR1=1; while (1) { if(TF1==1) { TF1=0; a++; TH1=15536/256; TL1=15536%256; if(a==10) { a=0; b++; P1=table[b]; if(b==5) { b=0; a=10; } } if(a==50) { a=40; b++; P1=table1[b]; if(b==5) { b=0; a=0; } } } } } 9: #include unsignedcharcodetable[]={0x00,0x03,0x0c,0x30,0xc0}; voidmain() { unsignedinta,b,c; TMOD=0x10; TH1=15536/256; TL1=15536%256; TR1=1; while (1) { if(TF1==1) { TF1=0; a++; TH1=15536/256; TL1=15536%256; if(a==10) { a=0; b++; c++; if(b==1) { P0=0x00; } if(b==2) { P0=table[1]; b=0; } if(c==12) { c=0; a=20; } } if(a==20) { a=10; b++; c++; if(b==1) { P0=0x00; } if(b==2) { P0=table[2]; b=0; } if(c==10) { c=0; a=30; } } if(a==30) { a=20; b++; c++; if(b==1) { P0=0x00; } if(b==2) { P0=table[3]; b=0; } if(c==6) { c=0; a=40; } } if(a==50) { a=40; b++; c++; if(b==1) { P0=0x00; } if(b==2) { P0=table[4]; b=0; } if(c==4) { c=0; a=0; } } } } } 10. #include #defineucharunsignedchar #defineuintunsignedint sbitP1_1=P1^1;//一根线接在P1.1口,另一端接在数码管任意一个 chari; voidmain() { TMOD=0x01; TH0=15536/256; TL0=15536%256;//定时50ms EA=1; ET0=1; i=0; TR0=1; while (1); } voidt0(void)interrupt1 { TH0=15536/256; TL0=15536%256; i++; if(i==20)//1s { P1_1=! P1_1; i=0; } } 11. #include #defineucharunsignedchar #defineuintunsignedint sbitkey0=P1^0;//从左到右灭 sbitkey1=P1^1;//从右到左灭 ucharcodetable1[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//从左到右灭 ucharcodetable[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//从右到左灭 voids(uintt); chari; voidmain() { while (1) { if(key0==0) {s(10); if(key0==0) { for(i=0;i<9;i++) {P2=table1[i]; s(800); } } } P2=0xff; if(key1==0) { s(10); if(key1==0) {for(i=0;i<9;i++) {P2=table[i]; s(600); } } } } } voids(uintt) {uintx,y; for(x=0;x for(y=125;y>0;y--); } 12 #include #include sbitfmq=P2^0; sbitkey1=P1^0; sbitkey2=P1^1; sbitkey3=P1^2; unsignedcharcodetab[]={0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; unsignedcharcodebs[]={0x0fe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x87f}; voidDelay10ms(unsignedintc) { unsignedchara,b; for(;c>0;c--) { for(b=38;b>0;b--) { for(a=130;a>0;a--); } } } voiddelay1ms(unsignedchari) { unsignedcharx; while(i--) { for(x=0;x<115;x++); } } voidmain() { if(key1==0) { Delay10ms(10); if(key1==0) { P0=0x01;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 最终 完整版