怎么用循环加位移编辑51单片机c语言循环位移

用c51语言,8051单片机的P1端口连接了8个发光二极管,用按位左移指令和逻辑或指令实现八个发点_百度知道
用c51语言,8051单片机的P1端口连接了8个发光二极管,用按位左移指令和逻辑或指令实现八个发点
用Cx51需要,8051单片机的P1端口连接了8个发光二极管,采用按位左移指令和逻辑或指令实现八个发光二极管轮流点亮的流水灯效果(点亮顺序为从P1.0到P1.7),具体的怎么编程,求给个程序谢谢!
我有更好的答案
R2,#200DLY:&&&&MOV&P1,A&nbspORG&&0000HLJMP&MAINORG&nbsp:&nbsp,$&&&&DJNZ&R2;&MOV&A,#0FEHLOOP:&&&&MOV&nbsp,DLY&&&&RET&&&R3,#250&&&&DJNZ&R3;&RL&&&&&LCALL&DELAY&&&A&&&&SJMP&LOOPDELAY:&&&&MOV&&0030HMAIN
高级工程师
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何用51单片机接收鼠标的“三轴位移”与按键信息
> 如何用51单片机接收鼠标的“三轴位移”与按键信息
如何用51单片机接收鼠标的“三轴位移”与按键信息
这里所用的鼠标是PS/2协议的鼠标,测试鼠标为电脑普通光电鼠标(以下简称从机),有一个滚轮,三个按键等。所用编程语言为单片机C语言。用AT89S52作为接收方(以下简称主机),主要负责:接收从机送给主机的信息包并处理、用LCD1602作为显示屏并实时显示位移计数和按键信息,最初无论如何也无法驱动滚轮,经过努力终于完成了这一任务。如下图所示:相对来说,主机的程序比较易写,但是,主机(AT89S52)处理这些信息还是相当吃力,这时代码的执行效率就非常值得注意,如果设置鼠标工作在stream模式,即使AT89S52用24Mhz的晶振也会经常出现数据处理失常。所以最好还是让鼠标工作在remote模式,祥细请参考《ps2技术参考》。我的初衷是将鼠标的数据作为实现2D定位的依据,也就是说,将鼠标当作一智能小车,通过无线读取鼠标的位移计数来实现定位。可惜所得的计数偏差太大,比如,将鼠标从A点移到B点,再回到A点,此时的计数值并不是当初在A点时的计数值。后来在论坛里发现有人曾经也有过我这种想法,而他所用的是激光鼠标,同样也是计数偏差过大而无法实现定位。 我们先要知道现存的总共有两类鼠标,一类就是所谓的2D(二维)鼠标,它就是我们平常用的那种没有滚轮的鼠标,由于这种鼠标在位移上只有X与Y两个方向,所以称之为2D(二维)鼠标;还有一类就是现在比较常见的3D(三维)鼠标,它们中间存在有一个滚轮,而这个滚轮会产生一个额外的Z位移量,因此,它在位移上有X、Y、Z三个方向,所以又称之为3D(三维)鼠标。下面,我们就来看看这两类鼠标发给主机的数据包有什么不同。下面,我们先来看看二维鼠标。第1个数据包位0:左键按下标志位,为1表示左键被按下。位1:右键按下标志位,为1表示右键被按下。位2:中键按下标志位,为1表示中键被按下。位3:保留位,总是为1。位4:X符号标志位,为1表示X位移量为负。位5:Y符号标志位,为1表示Y位移量为负。位6:X溢出标志位,为1表示X位移量溢出了。位7:Y溢出标志位,为1表示Y位移量溢出了。第2个数据包X位移量第3个数据包Y位移量第4个数据包Z位移量三维鼠标数据包中第一个数据包每位的含义与二维鼠标数据包中第一个数据包中每位含义完全相同,唯一不同的就在于它每次会多发送一个数据包,即第4个数据包,这个数据包包含了Z的位移量,同X、Y位移量相同的是,它们都是以补码表示的。不过与X及Y位移量不同的是,Z位移量是4位的,其中最高位(第四位)是符号位,因此,Z位移量的有效的范围为:-8~7。而X与Y的位移量是9位的,最高一位(第9位)是符号位,这个符号位在第一个数据包中表示,故,X与Y的位移量的有效范围为:-256~255。看到这里,你或许有疑问了,系统是怎么来知道到我到底应当接收3个数据包还是接收4个数据包的呢?三维鼠标的标准是由微软制定的,最初,这种三维的鼠标只工作在标准的PS/2模式下,如果你想让它工作在三维模式下,你需要用0xF3这个设置鼠标采样率的命令,按如下的顺序进行操作:1.设置鼠标采样率为2002.设置鼠标采样率为1003.设置鼠标采样率为80这之后,如果你的鼠标是个三维鼠标,那么,它将转到三维模式下进行工作,这个时候,主机向它发送0xF2(获得鼠标类型ID)命令,你的工作在三维模式下的鼠标将向主机返回它的类型ID,但如果你的鼠标不支持三维模式,即如果你的鼠标只是一个二维鼠标,它返回给主机的类型ID将是0,这样,主机就能够知道现在你用的鼠标是什么类型的鼠标,并由此知道应当接受3个还是4个数据包了。本实验将只操作标准的二维鼠标,如果你有兴趣,你可以对程序进行改动,以让它支持三维鼠标。
下图是PS2鼠标位移数据包格式: 虽然不能实现定位,但最少我又学多了一种通信协议。以下是程序的所有源代码:在"main.c"文件中:#include#include#include"LCD1602.h"#include#define uchar unsigned char#define sint signed int#define uint unsigned int#include"鼠标测试2.h"void display(){signed int nx=move_x,ny=move_y,nz=move_z;uchar length=0;if(move_x<0) {nx=-move_x;xy[2]=-;}elsexy[2]= ;for(length=7;length>2;length--){xy[length]=nx%10+48;nx/=10;}if(move_y<0) {ny=-move_y;xy[10]=-;}elsexy[10]= ;for(length=15;length>10;length--){xy[length]=ny%10+48;ny/=10;}if(move_z<0){nz=-move_z;lmr[10]=-;}elselmr[10]= ;for(length=15;length>10;length--){lmr[length]=nz%10+48;nz/=10;}write_command(0x80);write_bytes(xy);write_command(0x80+0x40);write_bytes(lmr);}uchar fx=0,fy=0,fz=0,a0=0,a1=0,a2=0,a3=0,fl=0,fm=0,fr=0;//uchar fxf=0,fyf=0;void deal_data(){if(fx) //位5:x符号标志位,为1表示x位移量为负move_x-=(256-a1);//x坐标减elsemove_x+=a1;//x坐标加if(fy) //位6:y符号标志位,为1表示y位移量为负move_y-=(256-a2);//y坐标减elsemove_y+=a2;//y坐标加if(fz)move_z-=(16-(a3&0x0f));elsemove_z+=(a3&0x07);if(fr)//如果点下右键{lmr[4]=R;}else if(fm)//如果点下中键{lmr[4]=M;}else if(fl)//如果点下左键{lmr[4]=L;}else{lmr[4]=N;}}void main(){SDA=1;CLK=1;delay(500);//鼠标上电后在500ms左右就会发给主机0xaa和0x00mouse_to_host();//如果没有接收这两个字节,可能鼠标一次上电后,mouse_to_host();//不能正常初始化成功或者可以用加长廷时来代替接收init_lcd();//初始化1602delay100;//这个廷时相当重要,否则可能在1602中有乱码出现write_command(0x80);//定位光标在第一行write_bytes("Initializing....");write_command(0x80+0x40);//定位光标在第二行write_bytes(" Please wait! ");while(init_mouse());//初始化鼠标deal_recive_data();//处理初始化鼠标时返回给主机的部分数据,用以作调试write_command(0x80);write_bytes(deal_1);//显示初始化鼠标时返回给主机的部分数据,用以作调试write_command(0x80+0x40);write_bytes(deal_2);//显示初始化鼠标时返回给主机的部分数据,用以作调试write_command(0x80+0x40);delay(500);write_bytes(" Mouse Normal ");delay(500);write_command(0x80);write_bytes("Test PS/2 mouse.");write_command(0x80+0x40);write_bytes("Copyright-11-28-");while(1){host_to_mouse(0xeb);//在remote模式中,主机每发送一个0xeb命令,从机mouse_to_host();//将应答0xfa,之后就是数据包a0=mouse_to_host();//第一个数据包fr=a0&0x02;//右键fm=a0&0x04;//中键fl=a0&0x01;//左键fx=a0&0x10;//x的符号位fy=a0&0x20;//y的符号位a1=mouse_to_host();//第二个数据包 x位移量a2=mouse_to_host();//第三个数据包 y位移量a3=mouse_to_host();//第四个数据包 z位移量fz=a3&0x08;//z的符号位/*fxf=a0&0x40+0x30;fyf=a0&0x80+0x30;lmr[6]=lmr[7]=*/deal_data(); //将x,y,z,fl,fr,fm加入字符串中display();//加入之后再一次性刷新显示}}/*第1个数据包位0:左键按下标志位,为1表示左键被按下。位1:右键按下标志位,为1表示右键被按下。位2:中键按下标志位,为1表示中键被按下。位3:保留位,总是为1。位4:X符号标志位,为1表示X位移量为负。位5:Y符号标志位,为1表示Y位移量为负。位6:X溢出标志位,为1表示X位移量溢出了。位7:Y溢出标志位,为1表示Y位移量溢出了。三维鼠标数据包中第一个数据包每位的含义与二维鼠标数据包中第一个数据包中每位含义完全相同,唯一不同的就在于它每次会多发送一个数据包,即第4个数据包,这个数据包包含了Z的位移量,同X、Y位移量相同的是,它们都是以补码表示的。不过与X及Y位移量不同的是,Z位移量是4位的,其中最高位(第四位)是符号位,因此,Z位移量的有效的范围为:-8~7。而X与Y的位移量是9位的,最高一位(第9位)是符号位,这个符号位在第一个数据包中表示,故,X与Y的位移量的有效范围为:-256~255。*/在"LCD1602.h"文件中:#define uint unsigned int#define uchar unsigned charsbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit LCDEN=P2^2; //使能信号位,将E位定义为P2.2引脚void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_command(char command)//发送命令{RS=0;P0=LCDEN=1;delay(3);LCDEN=0;RS=1;}void write_dat(char dat)//发送单个字节{RS=1;P0=LCDEN=1;delay(1);LCDEN=0;}void init_lcd()//初始化1602{RW=0;delay(5);write_command(0x38);//设置工作方式delay(5);write_command(0x0f);//设置显示、光标和闪烁开、关delay(5);write_command(0x06);//设置光标、画面移动方式delay(5);write_command(0x80);//设置光标位置delay(5);}void write_bytes(char *ch)//发送字符串{while(*ch)write_dat(*ch++);}在"鼠标测试2.h"文件中:#include#define delay10 {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}//延时10us#define delay100 {delay10 delay10 delay10 delay10 delay10 delay10 delay10 delay10 delay10 delay10;}sbit SDA=P3^2; //P3^3 //int0号中断(本程序不用中断接收方式)sbit CLK=P3^3;bit pp=0,ACK=0;uchar recv=0;signed int move_x=00000;//存放横坐标signed int move_y=00000;//存放纵坐标signed int move_z=00000; //总共接收到的字节总数unsigned char data xy[16]= "x: y: "; //2 10unsigned char data lmr[16]= "key:N z: "; //5 10unsigned char idata deal_1[20]=" "; //用来存放初始化鼠标时鼠标返回的信息unsigned char idata deal_2[20]=" ";uchar idata ret_ini_dat[18]=0; //间接寻址片内数据存储区,可访问片内全部RAM空间(256bytes)void host_to_mouse(uchar cmd){CLK=0;delay100;delay100;ACC=pp=~P;//获得奇偶校验位SDA=0;CLK=1;for(i=0;i<8;i++){while(CLK!=0);SDA=cmd&0x01;cmd>>=1;while(CLK!=1);}while(CLK!=0);SDA=//发送奇偶校验位while(CLK!=1);while(CLK!=0);SDA=1;while(CLK!=1);while(CLK!=0);ACK=SDA;//接收应答位while(CLK!=1);}uchar mouse_to_host(){uchar i,temp=0;while(CLK!=0);//等待低电平while(SDA!=0);while(CLK!=1);//等待高电平for(i=0;i<8;i++){temp>>=1;while(CLK!=0);if(SDA==1)temp=0x80|while(CLK!=1);}while(CLK!=0);pp=SDA;//接收奇偶校验位while(CLK!=1);while(CLK!=0);while(CLK!=1);ACC=if(~P==pp)//如果检验成功则返回接收到的数据,否则返回0{recv=}return 0;}//用0xf0代替相邻的0xc8,0x03可使鼠标进入remote模式,默认为stream模式uchar code num[15]={0xf3,0xc8,0xf3,0x64, //0xc8 200/sec,0x64 100/sec 0x50,0xc8,0xf2, //0x50 80/sec,0xf2读设备类型 0xf3,0xC8,0xf2,0XF0, //0x0a 10/sec,0xf2读设备类型,0x03滚轮分辨率8count/mm 0xe6,0xf3,0x28,0xf4};//0XE6 设置缩放比率为1:1,0x28 40/sec//(0xe8,0xxx)设置滚轮分辨率,/0xe8,0x03//*uchar code num[13]={0xf3,0xc8,0xf3,0x64,// 0xf3,0x50,0xf2,0xe8,0x03,,0xe6,0xf3,0x28,0xf4};//*///微软支持第4 和第5 键的Intellimouse 的驱动/*uchar code num[17]={0xf3,0xc8,0xf3,0x64, 0xf3,0x50,0xf2,0xf3, 0xc8,0xf3,0xc8,0xf3, 0xc8,0xf3,0x50,0xf2,0x04};*/bit init_mouse(){uchar i=0;bit good=1;for(i=0;i<3;i++){host_to_mouse(0xff); //复位命令,鼠标连续返回三个字节ret_ini_dat[0]=mouse_to_host();//鼠标返回0xfaret_ini_dat[1]=mouse_to_host();//鼠标返回0xaaret_ini_dat[2]=mouse_to_host();//鼠标返回0x00}for(i=0;i<15;i++){ host_to_mouse(num[i]);ret_ini_dat[i+3]=mouse_to_host();}return good=0;}void deal_recive_data()//处理初始化鼠标时返回给主机的部分数据,用以作调试{//处理成十六进制和ASCII码uchar i=0,j=0,xx=0;for(i=0;i<10;i++){xx=ret_ini_dat[i];if(((xx>>4)&0x0f)>=0x00 && ((xx>>4)&0x0f)<=0x09)deal_1[j++]=((xx>>4)&0x0f)+0x30;elsedeal_1[j++]=((xx>>4)&0x0f)+55;if((xx&0x0f)>=0x00 && (xx&0x0f)<=0x09)deal_1[j++]=(xx&0x0f)+0x30;elsedeal_1[j++]=(xx&0x0f)+55;}j=0;for(i=10;i<20;i++){xx=ret_ini_dat[i];if(((xx>>4)&0x0f)>=0x00 && ((xx>>4)&0x0f)<=0x09)deal_2[j++]=((xx>>4)&0x0f)+0x30;elsedeal_2[j++]=((xx>>4)&0x0f)+55;if((xx&0x0f)>=0x00 && (xx&0x0f)<=0x09)deal_2[j++]=(xx&0x0f)+0x30;elsedeal_2[j++]=(xx&0x0f)+55;}}
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一请选择一个讨论区
电子工程师的摇篮
--------------------------------
手把手教你学51单片机
USB逻辑分析仪
正在浏览此主题的非会员数:
主题状态: 启用
此主题中所有回复数: 3
用户等级:泥沙
STC51单片机入门 (C语言)
前言&&十多年的单片机学习与运用经验,再经历了4年的编写时间,将自己的知识拿来给大家分享,如果您是单片机初学者或对单片机已经学会了些皮毛,毫不吹牛,这绝对是您不能当面错过的学习与产品研发的顶级参考资料,因为这些知识都来源于实践,是花费了大量时间和金钱换来的,内容真实不虚。比如一个简单的延时程序,目前市面上还没有任何一本书籍或视频讲解清楚过,我这里却给出理论推导过程和直接计算用的软件,让您想延时多少就延时多少。还有定时器,也有最简洁的一个计算公式,只需输入晶振频率与定时时间就可得出定时器初值,这种技巧在其它地方都是找不到的,特别对串口通信、SPI通信、I2C通信、CRC校验等作了完整透彻并且浅显易懂的分析,特别是SPI硬接口,比宏晶官网介绍更详细,内容更准确。所以如果您还不敢自称高手,我这个文档对您就还有用,算自己吹捧了一下哈!&&&接着说入门问题,如果你对单片机一点都不清楚,建议先看金沙滩工作室小宋老师的视频教程,那个教程简单实用,是零基础入门的最佳选择,是我目前见过的最适合51单片机入门的视频教程,在看视频的同时对照本书相关内容学习,这样进步会很快。如果你对单片机已经学会了些皮毛,想把单片机真正学懂,想提高自己工作能力,这时看视频已经不能解决问题了。请你买本北行出版的《单片机C语言轻松入门》与《增强型8051单片机实用开发技术》吧。《单片机C语言轻松入门》写得太好了,内容真实,代码实用性极强,从书本的内容可以看出作者编写此书没有任何技术保留,本读者虽然已经有了十多年的单片机编程经验,但从这本书问世以来,我就爱不释手,凡是新的产品设计任务一来,我就先&抄袭&此书中的一些基本模块程序搭建程序框架,大大加快了我的产品设计进度。《增强型8051单片机实用开发技术》,也是北行出版的,本书详细讲解了宏晶科技公司功能最强大的STC12C5A60S2单片机,STC单片机工作速度大约是传统AT89C51单片机的12倍,引脚与AT89C51完全兼容,程序代码也一致,但功能比AT89C51强大得多,参考价格:6.8元,我经过几年时间的实际运用,此款单片机一直表现很出色。再与AVR单片机ATMEGA16和PIC单片机PIC16F877相比,三种单片机运行速度接近,功能接近,但STC下载程序不需要编程器或专用的下载线,价格比那两款单片机便宜一半,而且货源有保障。所以极力推荐,但要把STC单片机用好也不是那么简单,如果你已经从网上下载过一些STC的文档或已经用过STC单片机几年时间,但没有见过手边也没有《增强型8051单片机实用开发技术》的话,我会看不起你,我会认为你对51单片机根本就没学精通。将《单片机C语言轻松入门》与《增强型8051单片机实用开发技术》这两本书配合起来已经能解决51单片机的很多问题,但还是有一部分基础知识没讲清楚,比较高级的知识完全没有,所以就有了我这本书了,我把前两本书没讲清楚的但实际中经常用到的知识作了很多补充,融入了我本人十多年的重要的程序模块与编程技巧,增加了很多高级外设,高级外设的大容量数据存储(比如SD卡)相关部分运用了目前国内最先进最流行的znFAT文件系统,引用了原作者较多的代码,这样就算是三合一了。对于初学者,可能会很关心2个问题:1.现在的STM32那么流行,还有没有必要学单片机? 2.学单片机需不需要购买开发板?常用的STM32F103RBT6比STC12C5A60S2主要多1个USB接口和CAN总线接口,Flash容量128KB是STC的2倍,零售价16元,价格超过STC12C5A60S2两倍,我本人的看法是:能用STC的场合尽量用STC(STC也算是很强大了),另外通过STC把C语言学精通了对STM32也有极大帮助。学单片机离不开硬件,从事产品研发也要与硬件打交道,买来的开发板一般只有一张,舍不得大动,我这里提供3张印制板图可供读者直接制板,一次各做10张板子,这下就可放心的整了,不但多机通信实验可以做,还可以在产品设计时拿来做一些临时代码测试。如果你对硬件不熟悉,或为了节省时间,或你比较富有愿意支持我一下,让我获取微薄的利润,我也可将做好的成品恭送到你手上。还有朋友可能还会想到仿真器,仿真器就不用买了,任意一款STC单片机都自带在片调试功能,计算机串口与单片机串口连上就可以对STC在片调试了。除开发板外还有其它几个常用工具:数字万用表、逻辑分析仪、数字存储示波器,数字万用表随便找一个就行了,逻辑分析仪特别重要,推荐购买金沙滩工作室小宋老师的,价格便宜,连同快递费一起算大约160元,不要舍不得这点钱,要想彻底明白书上的串口通信、SPI通信、IIC通信,没这个东西几乎是不可能的,不过也要提示一下,24MHZ采样率的逻辑分析仪适合测量的信号频率在1MHz以内,信号频率过高的话,测出的波形将与实际不符。数字存储示波器我本人一直用国际权威型的:泰克TDS1012,双通道100MHz,此示波器好用,方便抓获电路中稍纵即失的异常信号,价格近万元,没条件的就免了吧。&大概介绍就这么多,我的编写也遵从《单片机C语言轻松入门》与《增强型8051单片机实用开发技术》两本书的原则:内容真实,实用性强,尽量介绍得更加完整。 && 欢迎大家加入下面的QQ群,本着开放分享的精神,共同讨论,共同进步。&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 作 者:李 友 全(网名:无量寿经)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& QQ群(STC51-STM32):&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 邮 箱:&&&日&
[ 13:40:28]
用户等级:泥沙
Re: STC51单片机入门 (C语言)
&这次更新了高级运用中SD卡与MP3部分内容,运用了目前国内最先进最流行的znFAT文件系统10.89.目&& 录&第1篇 单片机KEIL开发环境第1章& 点亮LED实例与经典延时程序介绍(看不懂就从第2章动手)&&&&&& &1.1 51单片机最小系统与芯片引脚图1.2 点亮LED的多个常用实例1.3 C语言各种延时程序详解&&& &&&&&&&&1.3.1 经典汇编延时程序时间计算(设晶振频率12Mz)&&&&&& &&&&&1.3.2 单片机C语言延时程序(大范围精确计算法:晶振频率任意)&&& &&&&&&&&1.3.3 C晶振频率任意1.3.4 单片机C语言延时程序(利用库函数实现短暂精确延时)1.3.5 使用定时器/计数器实现精确延时1.4 &main()、void main()和int main() 的区别&&&&&& &&& 1.5& printf 格式化输出函数&第2章& 建立Keil开发环境&&&&&&& 2.1 &快速建立工程和调试程序&&&&&&&&&&&& 2.1.1 安装Keil软件&&&&&&&&&&&& 2.1.2 第1个硬件实验2.1.3工程的简单设置2.1.4编译链接生成Hex目标文件2.1.5 初步软件调试&&&&&&& 2.2& 程序烧录下载:&&&&&&& 2.3 &实用的硬件仿真&&&&&&&&&&&& 2.3.1 普通51单片机(如89C51,89C52)的硬件仿真。2.3.2 STC高速51单片机的硬件仿真。&&&&&&&&& &&&2.3.3 各种仿真方法对比&&&&&& &2.4 &在keil中添加STC型号的3种方法&&&&&& &2.5& KEIL编辑器设置&&&&&& &2.6 &代码调试与软件仿真&&&&&&&&&&& &2.6.1 &Keil 工程的详细设置&2.6.2 &在线汇编与断点设置&&&&&&&&&&&&&&&&&& 2.6.2.1 &&&&&&&&&&&&&&&&&& &&2.6.2.2 &在线汇编&&&&&&& 2.6.2.3 &&&&&&&&&&& &&&&&&&&&2.6.2.4& 实例调试2.6.3& Keil 程序调试窗口2.6.3.1 &存储器窗口2.6.3.2& 窗口&&&&&& 2.6.3.3& 变量观察窗口&&&&&& 2.6.3.4& 2.6.4 &Keil 的辅助工具和部份高级技巧&&&&&& 2.6.4.1 &外围接口&&&&&& 2.6.4.2 &性能分析窗口&&&&&& 2.6.4.3& 变量来源浏览窗口&&&&&& 2.6.4.4& 代码作用范围分析窗口&&&& &&2.6.4.5& 串行窗口与实际硬件相连&&&&&& 2.6.4.6& IO&&&&&& 2.6.4.7& 直接更改内存值2.7 &硬件实验环境的建立&第3章& KEIL环境的深入理解(难度较大)&&&&&& &3.1& Keil中的*.M51文件详解&&&&&&&&&&&& 3.1.1& 完整的M51文件&&&&&&&&& &&&3.1.2& KEIL编译器的编译过程3.2& Keil中的STARTUP.A51文件详解3.3& Keil优化技巧3.3.1 &KEILC的优化级别选项3.3.2& &volatile关键字3.3.3 &编写代码时的优化3.4& Keil中的变量和函数的绝对地址定位详解&&&&&&&&&&&& 3.4.1 &变量绝对地址定位3.4.2 &3.5& Keil中的C语言与汇编语言混合编程3.5.1 直接在C语言中嵌入汇编程序3.5.2 在C语言中调用汇编程序3.6& Keil中的错误警告集&第2篇 单片机中的C语言第4章& 数据类型与运算符4.1 &原码、反码、补码4.2& BCD码详细介绍4.3 &二进制格雷码&&&&&& 4.4& 常量&&&& &&&&&&& 4.5& 变量的数据类型4.5.1 &字符型数据4.5.2& 整型数据4.5.3& 实数(单片机上尽量不用以免大幅度降低程序速度)4.5.4 &空类型(void)4.5.5& 指针型4.5.6& keil特有类型(位变量)4.5.7& 类型转换与强制类型转换技巧4.6& 变量存储空间4.7 &变量存储类型Auto、static、extern、register4.7.1& Auto 自动存储类型变量(局部变量存储类型默认为auto型)4.7.2& static静态存储类型变量4.7.3& Extern(外部)变量4.7.4& register(寄存器)变量4.8& 变量作用域4.9& #define&&typedef const的差别4.10& & &&&& 4.10.1 算术运算符&&&& 4.10.2 关系运算符&&&& 4.10.3 逻辑运算符&&&& 4.10.4 赋值运算符4.10.5 位操作运算符4.10.6 条件运算符4.10.7 特殊运算符4.10.8 分隔符4.11 &&第5章 C515.1& 数组:将相同类型数据组合在一起就构成数组(如数码管显示缓冲区)5.2& 结构体:将不同类型数据组合在一起就构成结构体(如年月日)5.3& 共用体:不同变量占用相同内存地址就是共用体5.4& 枚举:把变量允许的取值一 一列举出来就构成了枚举5.5& 指针:用于直接读取或修改内存值&第6章&& 流程与控制&&&&&&& &6.1& 分支结构&&&&&&&& 6.2& 循环结构&第7章&& 函&&&& 数&&&&&&&& 7.1& 函数定义7.2& 调用格式&&&&&&&& 7.3& 传值调用与传地址调用2种方式对比&&&&&&&& 7.4& 用函数指针变量调用函数(本质是用函数入口地址调用函数)&&& &&&& 7.5& 函数作用域第8章& &模块化编程&&&&&&& &8.1& 头文件的编写&&&&&&&& 8.2& 预处理指令8.3& 多文件程序&&&&&&&& &&&&&&&&&&&&&&&&&第3篇 单片机基本模块单元第9章& &定时计数器第10章& 中&&& 断&&&&&&& &9.1 使用中断最简单的方法9.2 外中断代码调试(按键的防抖技术)第11章& 串 行 口10.1& 最基本的串口通信10.2 &10.3 &利用MAX232芯片产生正负电源& &10.4 &USB 转串口&10.4.1& CH341A&&&&&&&&&&&& &10.4.2& CH340G&&&&&&&&&&&& &10.4.3& PL2303HX&10.5 &10.6 &RS485串行通信10.7& SSI校验和(CheckSum)10.9& CRC校验(全称:循环冗余码校验)10.9.1 &CRC原理10.9.2& CRC8查表法和计算法在18b20中的运用&&10.9.3& Visual Basic中实现CRC校验&&&&&&& 10.10& 串口输出汉字& 第12章& IIC 通信&&&&&&&& 11.1 I2C总线数据传输格式11.2 硬件仿真观察24C01读写结果&&&& 例11-1 &例11-2&&&&&&&& &&&&&&&&&&&&& 例11-3& , 11.3& 24C01运用实例例11-4& 24C01 例 11-5 利用24C01记录单片机上电次数&&& 例 11-6 利用24C01断电瞬间存储数据&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&& 11.4& 24C64硬件仿真与运用实例&第13章 SPI 通信& 12.2& SPI总线数据传输格式12.2& STC单片机的SPI硬接口&&&&& &&&12.2.1 SPI相关的特殊功能寄存器&&&&&&&& 12.2.2& STC单片机SPI硬接口运用实例&&&&&&&&&&&&&&&& 例12-1& STC-SPI硬接口(单主单从_忽略片选)例12-2& STC-SPI硬接口(单主单从_从机片选)&&&&&&&&&&&&&&&& 例12-3& STC-SPI硬接口(单主多从)&&&&&&&&&&&&&&&& 例12-4& STC-SPI硬接口(互为主从)&&&&&&& &12.3& X5045存储器读写操作& 12.3.1& X5045引脚功能描述12.3.2& X5045内部原理12.3.3 &X5045存储器读写实例(模拟SPI方式)&&&&&&& &&&&&&&&&&&& &&&第4篇 &&&编 程 实 例第14章& 常用单片机接口程序14.1& 数码管显示程序设计与输入输出IO口扩展&&&&&&&& 14.2& 74LS165并入串出实验&&&&&&&& 14.3& &&&&&&&& 14.4& 矩阵键盘&&&&&&& &14.5&& LED88第15章& 1602液晶第16章& 模数转换ADC&&&&&&&& 15.1& 8位AD转换芯片TLC0831(或ADC0831)&&&&&&&& 15.2& 使用STC12C5A60S2内部的10位模/数转换器&&&&&&&& 15.3& 12位AD转换芯片MCP3202&&&&&&&& 15.4& 16位AD转换芯片ADS1110&&&&&&&& 15.5& 18位AD转换芯片MCP3421第17章& 数模转换DAC&&&&&&&& 17.1& TLC5615数/模转换电路图与简单测试程序&&&&&&&& 17.2& TLC5615产生锯齿波&&&&&&&& 17.3& TLC5615&&&&&&&& 17.4& TLC5615第18章& 单总线18B20 通信&&&&&&& 17.1& DS18B20运用基础(引脚排列与通信时序)&&&&&&& 17.2& 单只DS18B20的温度检测&&&&&&& 17.3& 多只DS18B20的温度检测&&&&&&& &&&&&&17.3.1& 读取传感器代码&&&&&&&&&&&&& 17.3.2& 读取传感器温度&第19章& DS1302时钟芯片第20章& 红外通信第21章& 步进电机测试第22章& 频率检测第23章& 通用显示器制作第24章& 2M字节FLASH存储器W25Q16 (W25X16)第25章& SD卡25.1& 认识SD卡与SD卡读写测试&&&&&&&& 25.2 MMC + SD1.0 + SD2.0卡的初始化&&&&&&& &25.3 SD卡的单扇区读写&&&&&&&& 25.4 &SD25.2 &znFAT文件系统&&&&&&&&&&&&& &25.2.1& znFAT文件系统总体结构&&&&&&&&&&&&&& 25.2.2& znFAT 10.89的移植方法&&&&&&&&&&&&&& 25.2.3& znFAT移植基础实例&&&&&&&&&&&&&&&&&&&&&& 25.2.3.1 &文件系统初始化&&&&&&&&&&&&&&&&&&&&&& 25.2.3.2 &打开根目录下的短名文件&&&&&&&&&&&&&&&&&&&&& &25.2.3.3 &打开深层目录下的短名文件&&&&&&&&&&&&&&&&&&& &&&25.2.3.4 &&打开根目录下的文件(长名,无中文)&&&&&&&&&&&&&&&& &&&&&&25.2.3.5 &&打开深层长名目录下的文件(长名,无中文)&&&&&&&&&&&&&&&&&&&& &&25.2.3.6 &&打开深层目录下的文件(长名,含中文)&&&&&&&&&&&&&&&&&&& &&&25.2.3.7 &&打开文件时使用带有通配符的文件名&&&&&&&&&&&&&&&&&&& &&&25.2.3.8 &&文件定位读取数据( A )&&&&&&&&&&&&&&&&&& &&&&25.2.3.8 &&文件定位读取数据( B )&&&25.2.3.9 &&读取文件(数据重定向)&&&&&25.2.3.10 &&在根目录下创建文件(短名)&&&&&&&&&&&&&&&&&&& &&&25.2.3.11& &在深层目录下创建文件(短名)&&&&&&&&&&&&&&&&&& &&&&25.2.3.12 &&在根目录下创建文件(长名,无中文)&&&&&&&&&&&&&&&&&&& &&&25.2.3.13 &&在根目录下创建文件(长名,含中文)&&&&&&&&&&&&&&&&&&& &&&25.2.3.14 &&在深层目录下创建文件(长名,含中文)&&&&&&&&&&&&&&&&&&& &&&25.2.3.15& &在根目录下创建子目录(短名)&&&&&&&&&&&&&&&&&&& &&&25.2.3.16&& 创建多级子目录(短名)&&&&&&&&&&&&&&&&&&& &&&25.2.3.17& &在根目录下创建多级子目录(长名,含中文)&&&&&&&&&&&&&&&&&&& &&&25.2.3.18& &打开根目录下的子目录(短名)&&&&&&&&&&&&&&&&&&& &&&25.2.3.19&& 打开根目录下的子目录(长名,含中文)&&&&&&&&&&&&&&&&&& &&&&25.2.3.20 &&打开根目录下的通配子目录(长名,含中文)&&&&&&&&&&&&&&&&&&& &&&25.2.3.21& &文件数据写入(新建文件写入数据)&&&&&&&&&&&&&&&&& &&&&&25.2.3.21& &文件数据写入(添加数据)&&&&&&&&&&&&&&&&&&& &&&25.2.3.22 &&文件拷贝&&&&&&&&&&&&&&&&&&& &&&25.2.3.23&& 文件数据截断&&&&&&&&&&&&&&&&& &&&&&25.2.3.24 &&删除文件&&&&&&&&&&&&&&&&&&& &&&25.2.3.25&& 删除通配文件&&&&&&&&&&&&&&&&&&& &&&25.2.3.26& &删除目录&&&&&&&&&&&&&&&&&&& &&&25.2.3.27&& 删除通配目录&&&&&&&&&&&&&&&&&&& &&&25.2.3.28&& 磁盘格式化第26章& MP3播放器实验(znFAT运用实例)&&& &&&&&&&& 26.1& MP3&&&&&&&& 26.2&& &&&&&&&& 26.3& MP3&&&&&&&& 26.4& &&&&&&&& 26.5& &&&&&&&& 26.6& VS1003&&&&&&&& 26.7& 通过SD卡播放MP3文件 第27章& TFT彩色触摸屏运用(znFAT运用实例)27.1& TFT27.2& TFT模块的坐标系统第28章& 单片机扩展32K外部数据存储器62256&&&&&&& &28.1& 电路讲解&&&&&&&& 28.2& 软件实例&第29章& USB 通信第30章& 网络通信第31章& 第32章& 技巧第33章& 数制转换(含小数部分)与ASCII表参&& 考&& 文&& 献&&
[ 11:42:29]
用户等级:泥沙
Re: STC51单片机入门 (C语言)
附件大小限制实际内容无法上传,需要的朋友可以百度搜索“STC51单片机入门 (C语言)”,或联系QQ群(STC51-STM32):,邮 箱:
[ 11:47:33]

我要回帖

更多关于 c语言中位移 的文章

 

随机推荐