资源描述:
《[计算机软件及应用]单片机c编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、if-else-if形式语法结构如下:if(表达式1)处理程序1;elseif(表达式2)处理程序2;…else(表达式n)处理程序n;voidmain(){ucharsp0=0,rev_byte0,buffer0[2]={0,0},receive_frame[10];if(sp0==0){buffer0[sp0]=RXBUF0;//接收串口数据if(buffer0[0]==0xEB)sp0++;}/*判断第二个字节*/elseif(sp0==1){buffer0[sp0]=RXBUF0;if((buffer0[0]==0xEB)&&(buffer0
2、[1]==0x90))sp0++;//数据为EB90elsesp0=0;}elseif(sp0>=2){receive_frame[rev_byte0]=RXBUF0;rev_byte0++;}voidmain(){ucharflag=0,up=0,down=0,left=0,right=0;switch(flag){case1:up=1;break;//置标志case2:down=1;break;case3:left=1;break;case4:right=1;break;default:error=1;break;}}本例中输
3、入一个整数,经switch判断后,选择输出是一周中的星期几,整数不在1~7的范围内时就输出“Error”。可见此类多分支程序用switch语句可以很容易实现。表8-1KEILuVision2C51编译器所支持的数据类型7.特殊功能寄存器sfrsfr类型也是一种扩充数据类型,占一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。例如:sfrP0=0x80;//定义P0为P0端口在片内的寄存器,P0口地址为80HsfrP1=0x90;//定义P1为P1端口在片内的寄存器,P1口地址为90H8051单片机片内有21个特殊功能寄存器,它们分
4、散在片内RAM区的高128字节中,地址为80H~0FFH。对sfr的操作,只能用直接寻址方式。8.16位特殊功能寄存器sfr16sfr16类型占用两个内存单元,值域为0~65535。sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器,如定时器T0和T1。9.可寻址位sbitsbit类型也是C51中的一个扩充类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。例如:sbitP1_1=P1^1;//P1_1为P1中的P1.1引脚这样在以后的程序语句中就可以用P1_1来对P1.1引脚进行读/写操作。例如:若
5、a=ABH=10101011B,则:a=a<<2,将a值左移2位,其结果为10101100B=ACH;a=a>>2,将a值右移2位,其结果为00101010B=2AH。2.电路原理图电路原理图如图8-15所示。图8-158×8点阵LED显示原理图3.硬件电路连线(1)把“单片机系统”区域中的P1端口用8芯排线连接到“点阵模块”区域中的“DR1~DR8”端口上。(2)把“单片机系统”区域中的P3端口用8芯排线连接到“点阵模块”区域中的“DC1~DC8”端口上。4.程序设计内容8×8点阵共需要64个发光二极管,且每个发光二极管是放置在行线和列线的交叉点上。当对应的某
6、一列置1电平,某一行置0电平,则相应的二极管就亮。因此要实现一根柱形的亮法,对应的一列为一根竖柱,或者对应的一行为一根横柱,则实现柱形的亮法如下所述: 一根竖柱:对应的列置1,而行则采用扫描的方法来实现。 一根横柱:对应的行置0,而列则采用扫描的方法来实现。5.C语言源程序#include//定义字形字位码unsignedcharcodetaba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedcharcodetabb[]={0x01,0x02,0x04,0x08,0x10,0
7、x20,0x40,0x80};voiddelay(void){unsignedchari,j;for(i=10;i>0;i--)for(j=248;j>0;j--);}voiddelay1(void){unsignedchari,j,k;for(k=10;k>0;k--)for(i=20;i>0;i--)for(j=248;j>0;j--);}voidmain(void){unsignedchari,j;while(1){for(j=0;j<3;j++)//fromlefttoright3time{for(i=0;i<8;i++){P3=tab
8、a[i];P1=0xf