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