单片机C语言程序设计实例.pdf

上传人:文*** 文档编号:88048764 上传时间:2023-04-20 格式:PDF 页数:118 大小:8.31MB
返回 下载 相关 举报
单片机C语言程序设计实例.pdf_第1页
第1页 / 共118页
单片机C语言程序设计实例.pdf_第2页
第2页 / 共118页
点击查看更多>>
资源描述

《单片机C语言程序设计实例.pdf》由会员分享,可在线阅读,更多相关《单片机C语言程序设计实例.pdf(118页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 单片机C语言程序设计实训100例一基8051和PROTEUS仿真案例于 单片机C语言程序设计实训100例一基于8051+Proteus仿真案例第 0 1 篇基础程序设计0 1闪烁的LED/*名称:闪烁的LED说明:L E D按设定的时间间隔闪烁*/#include#define uchar unsigned char#define uint unsigned intsbit LED=P1AO;延时void DelayMS(uint x)(uchar i;while(x)(for(i=0;i120;i+);)主程序void main()(while(l)LED二LED;DelayMS(150)

2、;面3斤UFC1IO-13CU119M A L IP0.0/AD0P0.1/AD1P0.2/AD2XTAL2ru.JJAUJP0.4/AD4P0.5/AD5P0.6/AD6no IP0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSENP2.3/A11ALEP2.4/A12CArz.O/Al 3P2.6/A14P2.7/A15P1.0r J.UJHADP1.1r J.l/I AUP1 2r 1 .-ir 1.4P1.5P3.5fT1P1.6P3.6)WRP1.7P3.7/RDAT89C51上海师范大学信息与机电工程学院倪继锋0 2从左到右的流水灯/*名称:从左到右的流水灯说明:接

3、在P0 口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include#include#define uchar unsigned char#define uint unsigned int1 单片机C语言程序设计实训100例一基8051和PROTEUS仿真案例延时 于void DelayMS(uint x)(uchar i;while(x-)(for(i=0;i120;i+);)主程序void main()(P0=0 xfe;while(l)(P0=_crol_(P0,l);/P0的值向左循环移动DelayMS(150);03 8只L E D左右来回点亮/*名称:8只L E D左右来

4、回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/上海师范大学信息与机电r.程学院倪继锋#include#include 4r#define uchar unsigned char#define uint unsigned int/延时void DelayMS(uint x)uchar i;while(x)for(i=0;i 120;i+);AT89C5122pf-E=310kC3-Tl,10IF)主程序void main()uchar i;P2=0 x01;whilefl)2 单片机C语言程序设计实训100例一基8051和PROTEUS仿真案例于for(i=0;

5、i7;i+)(P2=_crol_(P2,l);/P2的值向左循环移动DelayMS(150);for(i=0;i7;i+)(P2=_cror_(P2,l);/P 2的值向右循环移动DelayMS(150);0 4花样流水灯/*名称:花样流水灯 F说明:1 6只L E D分两组按预设的多种花样变换显示*/#include#define uchar unsigned char#define uint unsigned intuchar code Pattern_PO=.):4.a _2 a _fct=上海师范大学信息与机电工程学院一0 xfc,0 xf9,0 xf3,0 xe7,0 xcf,0 x

6、9f,0 x3f,0 x7f,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xe7,0 xdb,0 xbd,0 x7e,0 xbd,0 xdb,0 xe7,0 xff,0 xe7,0 xc3,0 x81,0 x00,0 x8 l,0 xc3,0 xe7,0 xff,0 xaa,0 x55,0 x 18,0 xff,0 xf0,0 x0f,0 x00,0 xff,0 xf8,0 xfl,0 xe3,0 xc7,0 x8f,0 x 1 f,0 x3f,0 x7f,0 x7f,0 x3f,Ox lf,0 x8f,0 xc7,0 xe3,0 xfl

7、,0 xf8,0 xff,0 x00,0 x00,Oxff,Oxff,OxOf,OxfO,Oxff,0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xlb,0 xfd,0 xfe,0 xfe,0 xfc,0 xf8,0 xf0,0 xe0,0 xc0,0 x80,0 x00,0 x00,0 x0

8、0,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x80,0 xc0,0 xe0,0 xf0,0 xf8,0 xfc,0 xfe,0 x00,Oxff,0 x00,Oxff,0 x00,Oxff,0 x00,Oxff);uchar code Pattern_P2=倪继锋0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xfe,0 xfc,0 xf9,0 xf3,0 xe7,0 xcf,0 x9f,0 x3f,0 xff,

9、0 xe7,0 xdb,0 xbd,0 x7e,0 xbd,0 xdb,0 xe7,0 xff,0 xe7,0 xc3,0 x81,0 x00,0 x81,0 xc3,0 xe7,0 xff,0 xaa,0 x55,0 x 18,0 xff,0 xf0,0 x0f,0 x00,0 xff,0 xf8,0 xfl,0 xe3,0 xc7,0 x8f,0 xlf,0 x3f,0 x7f,0 x7f,0 x3f,Ox lf,0 x8f,0 xc7,0 xe3,0 xfl,0 xf8,0 xff,0 x00,0 x00,0 xff,0 xff,0 x0f,0 xf0,0 xff,0 xff,0 xff

10、,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f,0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xfe,0 xfc,0 xf8,0 xf0,0 xe0,0 xc0,0 x80,0 x00,0 x00,0 x80,0 xc0,0 xe0

11、,0 xf0,0 xf8,0 xfc,0 xfe,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,3 单片机C 语言程序设计实训100例一基8051和 PROTEUS仿真案例于0 x00,Oxff,0 x00,Oxff,0 x00,Oxff,0 x00,Oxff;/延时void DelayMS(uint x)(uchar i;while(x-)(for(i=0;i 120;i+);)主程序void main()uchar i;while(l)从数组中读取数据送至P 0 和 P2 口显示for(i=0;il36;i+)P0=Pattem_P0i;P

12、2=Pattem_P2i;DelayMS(lOO);)05 LED模拟交通灯/*名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5 次后红灯亮,红灯亮后,北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5 此后变红灯,东西向变;绿灯,如此重复。XTAL2C2C1TF22PFPOJO/ADOP0.1/AD1P02/AD2P03/AD3P04/A04P05/AD5POSfADBP07MD7P2VA9P2 2XA10P2 3XM1P2 4XM2P2 5XM3P2 6XA14P27XM5P3ORXOp34noP3包LAP3 7JTO-#include#define uchar unsigned ch

13、ar#define uint unsigned intsbit RED_A=P0A0;东西向灯sbit YELLOW_A=POA1;sbit GREEN_A=P0A2;sbit RED_B=P0A3;南北向灯sbit YELLOW_B=POA4;sbit GREEN_B=P0A5;uchar Flash_Count=OQperation_Type=l;闪烁次数,操作类型变量上海师范大学信息与机电工程学院一倪继锋4 单片机C 语言程序设计实训100例一基8051和 PROTEUS仿真案例延时 于void DelayMS(uint x)(uchar i;while(x-)for(i=0;i120;

14、i+);)交通灯切换产void Traffic_Light(),范switch(Operation_Type)大学case 1:东西向绿灯与南北向红灯亮 gRED_A=1;YELLOW_A=1 ;GREEN_A=0;1RED_B=0;YELLOW_B=1;GREEN_B=1;机DelayMS(2000);电Operation_Type=2;break;学case 2:东西向黄灯闪烁,绿灯关闭:DeIayMS(300);一YELLOW_A=-YELLOW_A;GREEN_A=1;倪if(+Flash_Count!=10)return;闪烁 5 次 J锋Flash_Count=0;Operatio

15、n_Type=3;break;case 3:东西向红灯,南北向绿灯亮RED_A=0;YELLOW_A=1;GREEN_A=1;RED_B=1 ;YELLOW_B=l;GREEN_B=0;DelayMS(2000);Operation_Type=4;break;case4:南北向黄灯闪烁5 次DelayMS(300);YELLO W_B=YELLO W_B;GREEN_B=1;if(+Flash_Count!=10)return;Flash_Count=0;Operation_Type=l;)主程序void main()(while(1 )Traffic_Light();0 6 单只数码管循环显

16、示095 单片机C 语言程序设计实训100例一基8051和 PROTEUS仿真案例于/*名称:单只数码管循环显示09说明:主程序中的循环语句反复将0 9的段码送至P0 口,使数字0 9循环显示*/#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY_CODELJ=OxcO,Oxf9,Oxa4,OxbO,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,O x ffJg延时void DelayMS(umt x)(uchar t;.C1匚while(x)for(t=

17、0;t120;t+);主程序void main()(uchar i=0;P0=0 x00;while(l)(PO=-DSY_CODEi;i=(i+l)%10;DelayMS(300);X112MXTAL1XTAL2RST d d d i|岫舞|3|PO,PO.1PO.PO.PO,PO.PO,PO.7P2.0/A8P2.1/A9P2.27A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0JRXDP3.1/TXDP3.21MTQP3.3JWT1P3.4/T0P3S/T1P 3.6 A P3.7而松壁b l浸嚏嗑蜜嚏海师范大学信息与机电工程学院倪继锋SEV

18、EN-SEG07 8只数码管滚动显示单个数字/*名称:8只数码管滚动显示单个数字说明:数码管从左到右依次滚动显示0 7,程序通过每次仅循环选通一只数码管*/#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);延时void DelayMS(uint x)(uchar t;while(x)for(t=0;t 120;t+);6 单片机C 语言程序设计实训1

19、00例一基8051和 PROTEUS仿真案例)于主程序void main()(uchar i,wei=0 x80;while(l)(for(i=0;i8;i+)(P2=0 xff;关闭显示wei=_crol_(wei,l);P()=DSY_CODEi;发送数字段码P2=wei;发 送位码DelayMS(300);)08 8只数码管动态显示多个不同字符电路如上图/*名称:8只数码管动态显示多个不同字符说明:数码管动态扫描显示07o*/#include#include#define uchar unsigned char#define uint unsigned intuchar code DSY

20、_CODE=OxcO,Oxf9,Oxa4,OxbO,Ox99,0 x92,0 x82,0 xf8,0 x80,0 x90;延时上void DelayMS(uint x)海(师uchar t;心while(x)for(t=0;t 120;t+);学12主程序息void main()与机1电uchar i,wei=0 x80;工while(l)程号for(i=0;i8;i+)匕倪PO=Oxff;继P0=DSY_CODEi;发送段码 锋wei=_crol_(wei,1);7 单片机C语言程序设计实训100例一基8051和PROTEUS仿真案例于P2=wei;发送位码I DelayMS(2);09 8

21、只数码管闪烁显示数字串电路如上图/*名称:8 只数码管闪烁显示数字串说明:数码管闪烁显示由07 构成的一串数字本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。*/#include#define uchar unsigned char#define uint unsigned int段码表uchar code DSY_CODE=OxcO,Oxf9,Oxa4,OxbO,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;位码表uchar code DSY_IDX=0 x01,0 x02,0 x04,0 x08,Ox 10,0 x20,0 x40,0 x80;延时vo

22、id DelayMS(uint x)(uchar t;while(x-)for(t=0;t120;t+);)主程序void main()(uchar i,j;while(l)(for(i=0;i30;i+)(for(j=0;j8;j+)(PO=()xff;P0=DSY_CODEj;发送段码P2=DSYJDXj;发送位码DelayMS(2);)P2=0 x00;关闭所有数码管并延时DelayMS(lOOO);海师范大学信息与机电工程学院倪继锋8 单片机C 语言程序设计实训100例一基8051和 PROTEUS仿真案例于10 8 只数码管滚动显示数字串电路如上图/*名称:8只数码管滚动显示数字串说

23、明:数码管向左滚动显示3个字符构成的数字串*/#include#include#define uchar unsigned char#define uint unsigned int 段 码表uchar code DSY_CODE=OxcO,Oxf19,Oxa4,OxbO,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,Oxff);下面数组看作环形队列,显示从某个数开始的8个 数(1 0表示黑屏)上uchar Num=(10,10,10,10,10,10,10,10,2,9,8;海延时Wvoid DelayMS(uint x)f大学uchar t;信while(x-)f

24、or(t=0;tl 20;t+);息与/主程序svoid main()工程uchar i,j,k=0,m=0 x80;学 二院while(l)刷新若干次,保持一段时间的稳定显示 京for(i=0;i15;i+)继锋for(j=0;j8;j+)发送段码,采用环形取法,从 第k个开始取第j个P0=0 xff;P0=DSY_CODELNum(k+j)%l 1;m=_crol_(m,l);P2=m;发 送位码DelayMS(2);)k=(k+l)%ll;环形队列首支针k递增,N um下标范围0 1 0,故 对1 1取余)11 K1-K4控 制 L E D 移位名称:K1-K4 控 制L E D移位说明

25、:按 下K 1时,P0 口 L E D上移一位;9 单片机C语言程序设计实训100例一基8051和PROTEUS仿真案例*/按下按下按下K2K3K4时,P0时,P2时,P2口口LEDLEDLED下移一位;上移一位;下移一位;#include#include#define uchar unsigned char#define uint unsigned int延时void DelayMS(uint x)cuchar i;while(x-)for(i=0;iXTAL1XTAL2RSTLEDvoid Move_LED()012a45a722234687popopopopopopopoPPP2P2P2

26、P2P2P2P3IMRXDP3.1/TXDr-:,2!iroP3.3JINT1P3.4/T0P3.5/T1P3.6AWP3 74?DD:t h:海师范大,学,信,息修机.电工mm9DK147-程if(PI&0 x 10)=0)P0=_cror_(P0,l);/KIelse if(Pl&0 x20)=0)P0=_crol_(P0,l);/K2else if(Pl&0 x40)=0)P2=_cror_(P2,l);/K3else if(Pl&0 x80)=0)P2=_crol_(P2,l);/K4)主程序void main()(uchar Recent_Key;最近按键P0=0 xfe;P2=0

27、xfe;Pl=Oxff;Recent_Key=Oxff;while(l)(if(Recent_Key!=P 1)(Recem_Key=Pl;保存最近按键Move_LED();DelayMS(lO);学院一倪继锋12 K 1-K4按键状态显示10 单片机C语后程序设计实训100例一基8051和PROTEUS仿真案例1*名称:说明:于K 1-K 4 按键状态显示K I、K 2 按 下 时 L E D 点亮,松开时熄灭,K3、K 4 按下并释放时L E D 点亮,再次按下并释放时熄灭;*/C 1.#include#define uchar unsigned char#define uint unsi

28、gned intsbit LEDl=P0A0;sbit LED2=P0Al;sbit LED3=P0A2;sbit LED4=P0A3;sbitK l=PlAO;sbit K2=PlAl;sbit K3=PlA2;sbit K4=PlA3;延时void DelayMS(uint x).JM-X123_U一XTAL1XTAL2RSTPO.O/ADOP0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7.K1,K2按下时LED亮,松开时灭PSENALEEAP2.0/A8P2.1/A9P2.2XA10P2.3/A11P2.4/A12P2.5/

29、A13P2.6/A14P2.7/A15P3.0/RXDP 3 1/TXDP3 2J1NT0P3.3/INT1P3.4/T0P3.5/T1P3.6iWR-P3.7而上海师范大学信息与机电工程学院工=uchar i;while(x)for(i=0;i120;i+);)主程序void main()倪继锋P0=0 xff;Pl=0 xff;while(l)LED1=K1;LED2=K2;if(K3=0)whiIe(K3=0);LED3=LED3;if(K4=0)while(K4=0);LED4=LED4;)DelayMS(lO);)13 K L K 4 分 组 控 制 L E D11 单片机C语言程序

30、设计实训100例一基8051和PROTEUS仿真案例于/*名称:K 1-K 4分组控制LED说明:每次按下K 1时递增点亮一只L E D,全亮时再次按下则再次循环开始,K 2按下后点亮上面4只LED,K 3按下后点亮下面4只LED,K 4按下后关闭所有LED*/#include#define uchar unsigned char#define uint unsigned int延时void DelayMS(uint x)(uchar i;while(x)for(i=0;i 120;i+);主程序void main()(uchar k,t,Key_State;P0=0 xff;Pl=0 xff

31、;while(l)上海师范大学信息与机电工程学院倪继锋t=Pl;if(t!=Oxff)DelayMS(lO);if(t!=Pl)continue;取得4位按键值,由模式XXXX111KX中有一位为0,其他均为1)变为模式0000XXXX(X中有一位为1,其他均为0)Key_State=t 4;k=0;/检 查1所在位置,累加获取按键号kwhile(Key_State!=0)(k+;Key_State=l;)根据按键号k进 行4种处理switch(k)(case 1:if(P0=0 x00)PO=Oxff;P 0 =l;DelayMS(200);break;case 2:P0=0 xf0;bre

32、ak;单片机C 语言程序设计实训100例一基8051和 PROTEUS仿真案例于case 3:P0=0 x0f;break;case 4:P0=0 xff;14 K1K4控制数码管移位显示/*名称:K 1-K 4 控制数码管移位显示说明:按 下 K 1 时 加 1 计数并增加显示位,按 下K2时 减1计数并减少显示位,按 下 K 3 时清零。*/#include#define uchar unsigned char#define uint unsigned int段码uchar code DSY_CODE=OxcO,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 x

33、f8,0 x80,0 x90,Oxff;位码uchar code DSYndex=0 x80,0 x40,0 x20,0 x10,0 x08,0 x04,0 x02,0 x01;待显示到各数码管的数字缓冲(开 始 仅 在 0 位 显 示 0,其他黑屏)上海师范大学信息与机电工程学院倪继锋uchar Display_Buffer=0,10,10,10,10,10,10,10);延时void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);)void Show_Count_ON_DSY()uchar i;for(i=0;i8)Key_Counts=

34、8;Display_BufferKey_Counts-1 =Key_Counts;break;case Oxfd:if(Key_Counts0)Display_Buffer-Key_Counts=10;break;case Oxfb:Display_BufferO=O;for(i=l;i8;i+)Display_Bufferi=10;Key_Counts=0;若键未释放则仅刷新显示,不进行键扫描while(Pl!=Oxff)Show_Count_ON_DSY();)15 K1-K4控制数码管加减演示/*名称:K 1-K 4 控制数码管加减演示说明:按 下 K 1 后 加 1 计数,按下后 减

35、1 计数,按 下 K 3 后清零。*/#include#include#define uchar unsigned char#define uint unsigned int段码ucharcode DSY_CODE=OxcO,Oxf9,Oxa4,OxbO,0 x99,0 x92,0 x82,Oxf8,0 x80,0 x90,Oxff;待显示的3 位缓冲uchar Num_Buffer=0,0,0;按键代码,按键计数上海师范大学信息与机电I程学院倪继锋uchar Key_Code,Key_Counts=0;延时void DelayMS(uint x)单 片 机 C 语言程序设计实训100例一基8

36、051和 PROTEUS仿真案例uchar i;于while(x)for(i=0;i120;i+);)显示函数void Show_Counts_ON_DSY()uchar i,j=0 x01;Num_Buffer2=Key_Counts/l 00;Num_Bufferl=Key_Counts/l 0%10;Num_Buffer0=Key_Counts%10;for(i=0;i3;i+)j=_cror_(j,l);P0=0 xff;PO=DSY_CODENum_Bufferi;P2=j;DelayMS(l);)主程序void main()上海师范大学信息与机电工程学院倪继锋uchar i;P0=

37、0 xff;Pl=0 xff;P2=0 x00;Key_Code=0 xff;while(l)Show_Counts_ON_DSY();Pl=0 xff;Key_Code=Pl;有键按下时,数码管刷新显示3 0次,该行代码同时起到延时作用if(Key_Code!=0 xff)for(i=0;i30;i+)Show_Counts_ON_DSY();switch(Key_Code)case Oxfe:if(Key_Counts0)Key_Counts-;break;case Oxfb:Key_Counts=0;)Key_Code=Oxff;15 单片机C语言程序设计实训100例一基8051和PRO

38、TEUS仿真案例于C1H F由-.1/4-16 4 X 4矩阵键盘控制条形L E D显示P2JJ/A8P21/A9P2.2XA10P2.3XM1P2.4XA12P2.5XM3P2.6ZA14P27/A15P3.ORXDP3.1/TXDP3 2NT0P3 3fl4fTP3 4/T0P351_P36AWP3.7/RD-/*名称:4 X 4矩阵键盘控制条形L E D显示说明:运行本例时,按下 的 按 键 值 越 大 点 亮 的#include#include#define uchar unsigned char#define uint unsigned int矩阵键盘按键特征码表 XTALIXTAL

39、2RSTPOO/ADOPO.1/AD1P02/AD2P03/AD3P04/AMP05/AD5P0 6/AD6PO.7/AD7uchar code KeyCodeTable=Ox 11,0 x 12,Ox 14,Ox 18,0 x21,0 x22,0 x24,0 x28,0 x41,0 x42,0 x44,0 x48,0 x81,0 x82,0 x84,0 x88;/延时void DelayMS(uint x)uchar i;while(x-)for(i=0;i120;i+);)键盘扫描uchar Keys_Scan()(uchar sCode,kCode,i,k;低4位 置0,放 入4行Pl=

40、OxfO;若 高4位出现0,则有键按下if(Pl&OxfO)!=OxfO)DelayMS(2);if(Pl&OxfO)!=OxfO)(sCode=Oxfe;行扫描码初值for(k=0;k4;k+)/对4行分别进行扫描(Pl=sCode;if(Pl&OxfO)!=OxfO)(kCode=Pl;for(i=0;i16;i+)/查表得到按键序号并返回i f(kCode=KeyCodeT ablei)上海师范大学信息与机电工程学院一倪继锋16 单片机C语言程序设计实训100例一基8051和PROTEUS仿真案例于)return(i);elsesCode=_crol_(sCode,1);return(-

41、l);主程序void main()uchar i,P2_LED,P3_LED;uchar KeyNo=-l;按键序号,-1表示无按键while(l)KeyNo=Keys_Scan();扫描键盘获取按键序号KeyNoif(KeyNo!=-l)P2_LED=0 xff;P3_LED=0 xff;for(i=0;i=KeyNo;i+)键值越大,点亮的L E D越多上海师范大学信息与机电工程学院if(i8)P3_LED=1;elseP2_LED=1;)P3=P3_LED;点亮条形 LEDP2=P2_LED;倪继锋)RP1?ESPACH-81 7数码管显示4 X 4矩阵键盘按键号/*名称:数码管显示4

42、X 4矩阵键盘按键号说明:按下任意键时,数码管都会显示其键的序号,扫描程序首先判断按键发生在哪-列,然后根据所发生的行附加不同的值,从而得到按键的序号。*/C1匚 I X1C2-r-HA-22PFR1U IXTAL1XTAL2匚匚匚cirz OLirzP0CUAD0POtXADIP02XAD2PO3XAD3P04XAD4P05MD5PO6MD6PO7XAO7P2 0M9P2UA9n2tM0P2.3/A11P24/A12P25/A13P26/A14P27tMsP3.01RXDP3.inxpP3?jff0P33HNHP3 4rt0LSISOUNDS17 单片机C语言程序设计实训100例一基8051

43、和PROTEUS仿真案例#include 于#define uchar unsigned char#define uint unsigned int段码uchar code DSY_CODE=OxcO,Oxf9,Oxa4,OxbO,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,Oxa 1,0 x86,0 x8e,0 x00;sbit BEEP=P3A7;上次按键和当前按键的序号,该矩阵中序号范围015,16表示无按键uchar Pre_KeyNo=16,KeyNo=16;延时void DelayMS(uint x)(uchar i;

44、while(x)for(i=0;i 120;i+);矩阵键盘扫描void Keys_Scan()(uchar Tmp;Pl=0 x0f;/iW 4 位置 0,放入 4 行DelayMS(l);Tmp二Pl八OxOf;按键后Of变 成0000XXXX,X中 一 个 为0,3个 仍 为1,通 过 异 或 把3个1变为0,唯一 的0变 为1switch(Tmp)判断按键发生于03列的哪一列(case 1:KeyNo=0;break;case 2:KeyNo=1 ;break;case 4:KeyNo=2;break;case 8:KeyNo=3;break;default:KeyNo=16;无键按下

45、Pl=OxfO;低4位 置0,放 入4列DelayMS(l);Tmp=P l 4八OxOf;按键后f 0变 成XXXX0000,X中 有1个 为0,三个 仍 为1;高4位 转 移 到 低4位并异或得到改变的值switch(Tmp)对03行分别附加起始值0,4,8,12(case 1:KeyNo+=0;break;case 2:KeyNo+=4;break;case 4:KeyNo+=8;break;case 8:KeyNo+=l 2;蜂鸣器void Beep()18上海师范大学信息与机电工程学院一倪继锋 单 片 机C语一程序设计实训100例一基8051和PROTEUS仿真案例(于uchar i

46、;for(i=0;i100;i+)(DelayMS(l);BEEP=BEEP;BEEP=0;)主程序void main()(P0=0 x00;BEEP=0;while(l)(Pl=OxfO;if(Pl!=OxfO)Keys_Scan();获取键序号if(Pre_KeyNo!=KeyNo)(PO=DSY_CODEKeyNo;Beep();Pre_KeyNo=KeyNo;)DelayMS(lOO);I-.海师范大学信息与机电r.程学院倪继锋1 8开关控制LED/*名称:开关控制LED说明:开 关 S 1 和 S 2 分别制 LED1 和 LED2o*/#includesbitSl=PlAO;sbi

47、t S2=P1A1;sbitLEDl=POAO;sbit LED2=P0Al;/主程序void main()(while(l)C1U1.XTAL1XTAL2RSTQI234567P1P1P1P1P1P1P1P1PO.O/ADOPO.1/AD1PO.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6PO.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.OXDP3.1/TXDP3.2)lNT0P3.3flNrTP3.4/T0P3.5H-1P3E恒P3.7而ALEDl=Sl;19 单片

48、机C语言程序设计实训100例一基8051和PROTEUS仿真案例LED2=S2;于)1 9继电器控制照明设备/*名称:继电器控制照明设备说明:按 下K 1灯点亮,再按下时灯熄灭刃#include#define uchar unsigned char#define uint unsigned intsbit K1=P1AO;sbit RELAY=P2A4;延时void DelayMS(uint ms)(uchar t;while(ms-)fbr(t=O;t 120;t+);)主程序void main()江:I工-2 3J止XTAL1XTAL2Pl=0 xff;RELAY=1;while(l)i

49、d4d!dRSTPOfl/ADOPO1/AO1P02ZAD2P03/AD3PO.4ZMJ4P05/AD5P06 依Q6TO7ZAD7P2XJ/A8P2.1/A9P22/A10P2.3/A11P2.4/A12P2.5/A13P2.6/AI4P27/A15P3.0JRXDP3.1/TXDP3.2/1NTO-P3.3/WTTP3.4XT0P3.5/T1P3.6iWR-P3.7而AT网冽浸检浸浸塾货喷浸变噎玉H i上海师范大学信息与机电工程倪继锋if(Kl=0)工while(Kl=0);RELAY=RELAY;DelayMS(20);2 0数码管显示拨码开关编码/*名称:数码管显示拨码开关编码P1.0

50、P1 1 P3.1/TXDPt.2 P3.24NTOPI.3 P3.3JlNfrPI.4 P3.4/T0PI.5 P3.5/T1PI,6 P3.6IWRPI.7 P3.7而3二一二*/说明:系统显示拨码开关所设置的编码()0()255#include#include#define uchar unsigned char20 单片机C 语言程序设计实训100例一基8051和 PROTEUS仿真案例#define uint unsigned int各数字的数码管段码(共阴)uchar code DSY_CODE=Ox3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁