单片机流水灯c语言实现.pdf
《单片机流水灯c语言实现.pdf》由会员分享,可在线阅读,更多相关《单片机流水灯c语言实现.pdf(96页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验一 闪烁的LedC1rHk-220pC2T F220p.X1CRYSTAL 18R110kC3D1U119220RV1 LED-RED29 30后9 XTAL1P0.0/AD0P0.1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSENP2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P1.0P3.0/RXDP1.1P3.1/TXDP1.2P3.2/INT0P1.3P3.3/INT1P1.4P3.4/T0P1.5P3.5/T1P1.
2、6P3.6/WRP1.7P3.7/RDAT89C51 3938:37 36 3534:33 32 21 22 23 2425263 2728107TJ2I374HE77名称:闪烁的Led说明:Led按设定的时间间隔闪烁,约亮1 秒灭1 秒/#include#define uchar unsigned char/uchar 宏定义ttdefine uint unsigned intuint 宏定义sbit led=PlA0;/延时子程序/void delayMs(uint x)(uchar i;/uchar i 取值为 0-255while(x-)for(i=0;i120;i+);延时 120
3、微妙/主程序/-void main()(while(l)(led=led;delayMs(2050);约亮 1 秒灭 1 秒实验二 从左到右的流水灯C1T的IC2TI22OPBTWU1XTAL1XTAL2RSTP3.aRXOP31,JXDP3.2.1RT6P3.3/1NY7P34ToP3.5T1P3.&WRP3.7TOALEEAPO.O/ADOPO.VAD1PO2/AD2PO3AD3P0.4/AD4P05/A05PO.6.AD6PO.7/AD7H匐老罟曾系名称:从左到右的流水灯说明:接 在 P0端口的8 只 Led从左到右循环依次点亮,产生走马灯效果/-#include#include 循环左
4、移头文件宏定义#define uchar unsigned char#define uint unsigned int/延时函数void delayMs(uint x)(uchar i;while(x-)for(i=0;il20;i+);/-主程序void main()PO=Oxfe;PO 口初始化值 1111.1110while(l)PO=_c rol_(PO,l);/PO 口循环左移 1 位delayMs(15O);晶振为 11.0592 时,0.1594885 秒移动一次)实验三左右来回循环的流水灯U1XTAL1XTAL2RSTPO.QADOP0.1/AD1PO2AD2PO3AD3PO.
5、4ACMPO.&AD5P0.6/AD6P0.7/AD7P2.a,A8P2.t/A9P22A10P2.WA11P 2 4 A l 2P2.5A13P26A14P2.7.A15P3.0/RXDP3.1/TXDP3.2.1NTOP33,W HP3 4,-T0P3&-T1P3.6WRP3.7TO名称:左右来回循环的流水灯说明:程序利用循环移位函数一c rol_和 一c ror形成来回滚动的效果/#inc lude#inc lude#define uc har unsigned c har#define uint unsigned int/void delayMs(uint x)(uc har i;wh
6、ile(x-)for(i=0;i120;i+);)/-void main()uchar i;P2=OxOl;P2端口初始化while(l)死循环(for(i=0;i7;i+)/i自加1,当 i=7时执行第二个for语句(P2=_crol_(P2,l);P2 端口循环左移 1 位delayMs(150);)for(i=0;i7;i+)(P2=_cror_(P2,l);/P2 端口循环右移 1 位delayMs(150);)注释 for(i=0;iXTAL1XTAL2RSTPSENALEAPO.aADOP0.1/AD1P0.2/AD2P03AD3P0.4/AD4P0.5*AD5P0.6.AD6P0
7、.7/AO7P2QA8P21-A9P2.2/A10P2.3/A11P2.4AI2P2S/A13P2 6rAi 4P2.7/A15P3.0.RXDP3.1/TXDP3.2/WTOP33557TP3.4/TOP3.5T1P3.6WRP3.7/RD名称:花样流水灯说明:16只 LED分两段组按预设的多种花样变换显示/-#include#d efine uchar unsigned char#d efine uint unsigned intuc har c ode pattern_PO=Oxfc,Oxf7,Ox5f;/5 POuc har c ode pattern_P2=0 xff,0 x07,0
8、 xf5;定义 P2 显示数组调整数组。里的内容,可以实现自定义的花样显示/-void delayMs(uint x)(uc har i;while(x-)for(i=0;i120;i+);)/-void main()(uc har i;while(l)|for(i=0;i7;i+)(PO=pattern_POi;/i自加1次,PO数组重新扫描1次P2=pattern_P2i;/i自加1次,P2数组重新扫描1次delayMs(150);)数组定义格式为/uc har c ode pattern_P0=0 xfc,0 xf7;uhar为数组类型,pattern_PO数组名称/c ode数组存储类
9、型0 xfc,0 xf7为数组显示参数,为Oxff为全部关闭实 验 五Led模拟交通灯/Led模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁,闪烁5 秒后亮红灯,红灯亮后,南北向有红灯变为绿灯,若干秒后南北向黄灯闪烁,闪烁5 次后,亮红灯,东西向绿灯亮,如此重复/-#include#define uchar unsigned char#define uint unsigned intsbit red_a=POAO;sbit yellow_a=POAl;sbit green_a=P0A2;sbit red_b=P0A3;sbit yellow_b=P0A4;sbit green_b=P0A5;/s
10、bit 为 LED 控制位定义uchar Flash_Count=0,Operation_Type=l;/Flash_Count闪烁次数和Operation_Type操作类型变量定义/void delayMs(uint x)(uchar i;while(x-)(for(i=0;i120;i+);)/交通灯切换子程序void Traffic_Light()(switch(Operation_Type)(case 1:东西向绿灯亮与南北向红灯亮red_a=l;yellow_a=l;green_a=0;red_b=0;yellow_b=l;green_b=l;delayMs(2000);Operat
11、ion_Type=2;break;case 2:东西向黄灯开始闪烁,绿灯关闭delayMs(300);yellow_a=!yellow_a;green_a=l;黄灯闪烁5 次if(+Flash_Count!=10)return;Flash_Count=0;Operation_Type=3;break;case 3:东西向红灯与南北向绿灯亮red_a=0;yellow_a=l;green_a=l;red_b=l;yellow_b=l;green_b=0;delayMs(2000);Operation_Type=4;break;中断 case3 执行 case4case 4:南北向黄灯开始闪烁de
12、layMs(300);yellow_b=!yellow_b;green_b=l;if(+Flash_Count!=10)return;Flash_Count=0;Operation_Type=l;)/void main()(while(l)Traffic_Light();)/switch是多分支选择语句常用格式“switch(表达式)/case常量表达式1;语 句 1/case常量表达式2;语句2/case常量表达式3;语句3/case常量表达式n;语句n“default:语句 n+1“return是返回值,break的返回是指停止这次执行,返回开始实验六单只数码管循环显示0-9C1HF220
13、p19O X1C2 r-CRYSTA%220p R19 U1 XTAL1XTAl_210k-C3刊卜-10uRSTPSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDpa.a/ihrroP3.3/INTTP3.4/T0P3.5/T1P 3 6亚P3.7/RD3837-3
14、63534332-1-2-3-4-5-6-7-8-OT-2-3-4-5-6-7-为 2互髭互必匿-五黑五RP1RESPACK-8WAT89C51单只数码管循环显示0-9说明:主程序中的循环语句反复将0-9 的段码送至P0端口/使数字0-9 循环显示/#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,Oxff;。内为共阳数码管0-9的编码/void DelayMs(ui
15、nt x)(uchar i;while(x-)for(i=0;i120;i+);)/void main()uchar i=0;PO=OxOO;while(l)(PO=DSY_CODEi;显示数组取反i=(i+l)%10;/DelayMs(180);说明;电路中数码管接法是共阴,段码表是共阳的;所以用PO=YDS_CODEi语句取反显示实 验 七8只数码管滚动显示单个不同数字XTAL1XTAL2RSTPO.OiADOPO.1/AD1PO2AD2P03/AD3P0.4/AD4PO.5AD5PO.6,AD6PO.7/AD7P2.O/ABP2.1/A9P22A1OP23A11P 2 4 A l 2P
16、2 s A i 3P 2 6 A l4P2.7/A15P3.0/RXDP 3.trrxpP、一 L,P3.3/INT7P3.4.1DP 3 5rHP3.aWRP3.7TOAT89C51用三极管驱动显示不正常,最好去掉三级管驱动/咫只数码管滚动显示单个不同数字说明:数码管从左到右依次滚动显示0-9,程序通过每次仅循环选通一只数码管/#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf
17、8,0 x80,0 x90,;数组定义/void DelayMs(uint x)uchar i;while(x-)(for(i=0;i200;i+);/-void main()(uchar i,k;k=0 x80;/K 初始化 1000.0000while(l)(for(i=0;i10;i+)(PO=Oxff;关闭显示PO=DSY_CODEi;发送数字段码k=_crol_(k,l);P2=k;所以第 1 位右移P2=k;发送数码管位码,打开对应的数码管DelayMs(300);/i=10是因为数组里有1-9共十个段码k=0 x80;因为移位P2八 8 开始,移动一位才开始显示第一位实验八8只数
18、码管显示多个不同字符C2XTAL1XTAL2RSTr mo X1 CRYSPO.O/ADOP0.VAD1P02AD2P0.3AD3P0.4/AD4P0.5/AD5P0.&AD6PO.7/AD738 P0190123451/AA1A1A1A1A1A12.Z1&4s,67,PP2,P2P2,P2,P2.P2.36 P03PSENP1QPl iP12P13P1.4PtSPI 6Pl 7P3GRXDP3.VTXDP 3 2标P3.3.iRTlP 3 4F)P3.5THP3.6匹P3 7,WOI R只数码管显示多个不同字符说明:数码管动态显示0-7,(刷新快)/-#include#include#def
19、ine uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0 xc0,0 xf9,0 xa4/0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff;数码管段码数组定义/延时程序void DelayMs(uint x)(uchar i;while(x-)for(i=0;i120;i+);)/主程序/void main()uchar k,m=0 x80;赋初值while(l)for(k=0;k8;k+)(m=_crol_(m,l);位右移P2=m;位码PO=DSY_CODEk+l
20、;段码DelayMs(10);延时短本例刷新速度快!视觉显示多个字符如果延时间加长,就是固定位置显示单个字符实验九数码管闪烁显示字符串5ABCDEFG DP 12345678P2Q/A8P2.1/A9P2.2/A10P23XA11P2.4/A12P 25仇 13P2.&AJ4P2.7/A15R3.GRXDP3.1.TXDP32,WT0P3.3WF7P3.4/TDP3.5T1P3.6WRP3 7,D2御R1-F10kr C310u0.V23向7popopopopopopopoWAD1AD2AD3黑湛PSENALEEA数码管闪烁显示字符串说明:数码管闪烁显示由0-7 构成的一串数字/本例用动态刷新
21、发法显示一串字符,在停止时所有数字显示消失(区别定义两个数组)#include#define uchar unsigned char#define uint unsigned int数字0-9 的数码管段码表uchar code DSY CODE=0 xc 0,0 xf9/0 xa4/0 xb0,0 x99,0 x92/0 x82,0 xf8,0 x80,0 x90;数码管位选通索引表(位码表)uc har c ode DSY_IDX=0 x01,0 x02,0 x04,0 x08,/0 x10,0 x20,0 x40,0 x80;/延时程序/void DelayMs(uint x)(uc h
22、ar i;while(x-)for(i=0;i120;i+);/主程序Hvoid main()(uc har k,m;赋初值PO=Oxff;/PO 初始化P2=0 x00;/P2 初始化while(l)for(k=0;k30;k+)(for(m=0;m8;m+)(P2=DSYDXm;显示位码PO=DSY_CODEm;显示段码De!ayMs(20);)P2=0 x00;位关闭DelayMs(lOOO);)第一-个for(k=0;k30;k+)数码管保持显示时间延时第二个for(m=0;m8;m+)位码和段码显示位限制实验十 8只数码管滚动显示数字串E89C1T卜220PC2Sxi CRYSTAL
23、2 2 即 R11-C3AT89C51PSENALEPO.O,ADOPO1/AD1P02AD2PO.3AD0P0.&AD4P0.&AD6P0.6/AD6P0.7-AD7P2QA8P2 VA9P2.2-A10P2.3/A11P2.4/A12P2.&A13P2.6/AI4P2.7/A15P3.0/RXDP3.1.TXDP3-2.NTOP3 3/WTTP3.4/TOP3.5EP3.6WRP3.7W,39 叩.0PO 23 02.Z 03 25 3 26 05-9 p 3:M P0上)3:;,P0 7 37 叩 NQ6Q7:sz s蚩z iz iXTAL1XTAL212345B7883933883 8
24、 只数码管滚动显示数字串说明:数码管向左滚动显示3 个字符构成的字符串#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,Oxff;程序将下面数组看成环形队列显示从某个数开始的8 个 数(10表示黑屏)uchar Num=10,10,10,10,10,10,10,10,2,8,9;/void DelayMs(uint x)(uchar i;while(x
25、-)for(i=0;i120;i+);)/void main()uchar i,j,k,m;PO=Oxff;P2=0 x00;m=0 x80;while(l)for(i=0;i10;i+)显示保持for(j=0;j8;j+)m=_crol_(m,l);P2=m;采用环形取法从第K 开始取J 个PO=DSY_CODENum(k+j)%ll;DelayMs(2);)环形队列首指针K 递增,Num的下表范围为/A)-1 0 因此对 11求余k=(k+l)%ll;)在用软件仿真是最好不要加三极管驱动!因程序运行占用CPU资源,运行不正常实验1K1-K4控 制 LEd移位C1220p _|_ LU1口
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 流水 语言 实现
限制150内