欢迎来到天天文库
浏览记录
ID:29878246
大小:2.54 MB
页数:161页
时间:2018-12-24
《片机汇编课程设计案例精编》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、51单片机汇编课程设计案例精编MSC5151单片机汇编课程设计案例精编1MSC511第六课C51基础1简结键盘去抖方法5【小雨的成长】外部中断的简单应用10第七课 按键处理13[单片机教程]第九课中断应用—红外解码15[单片机教程]第十课LCD1602显示2051单片机与串口通信(含代码)24[单片机教程]第十二课ADC0832应用28【小雨的成长】简单东西复杂玩之流水灯37lcd ko57《51单片机汇编课程设计案例精编》源代码3181空调温度控制器102简易电子琴设计106设计实验跑马灯1111温度采集系统112A/D与D/A转换117单片机MCS-51系列指令快速
2、记忆法118汇编语言在51单片机中的所有指令有那些122单片机复位电路设计128单片机复位电路的可靠性分析135I2C总线原理及应用实例143三极管的基本放大电路146AVR,C51和PIC八位单片机性能比较148电力电子器件的缓冲电路152利用PC的RS232口控制LED灯155十六进制显示159二进制转换成十六进制的方法159第六课C51基础更新时间:2009年01月08日浏览次数:183作者:来源: 上一课我们讲了一些C51的知识,并且把第一、二课的汇编程序用C写了出来,今天我们继续学习一些C51的基础知识。上节我们学过for,while,除此还有dowhile,i
3、felse,switch之类的,这些都是很常用,我们将在以后的课程中逐步来学习。本节课先把第三、四课的汇161编程序改用C来写一写,进一步领会一下C和汇编的差别。 我们先看看C的一些运行运算符。 第三课我们讲的跑马灯,用二种方式,一种移位一种查表来实现,现在我们来看看实现这些功能的C程序。首先是移位方式161sfrLedPort=0x80;是特殊功能寄存器声明,P0口地址是0x80,我们这里声明LedPort就是指向P0口,这样在程序里就可以直接写LedPort来代替写P0,这个与汇编相似。 uchardat;这是定义一个无符号单字节变量,把它放在程序顶,称为全局变量,
4、这样,在每个子函数里都可以对它进行引用、修改,在整个程序执行中都占用固定的RAM空间。相对应的就是局部变量,比如我们在mDelay函数里定义的i,j就是局部变量,它们只有在函数执行前才生效,结束后就消失了,占用的RAM空间会被释放,不能被其它函数引用,在C里面,我们一般建议能用局部变量就不用全局变量,这是因为单片机的RAM空间有限,可要节约使用喔~~ if(!dat)dat=1;从图一中我们可以知道符号“!”是逻辑非,即如果dat是0,那么!dat之后,结果就是1(真),如果dat是非0(注意,只要是非0,不管是1、2、3戓什么值),那么!dat结果就是0(假),逻辑判断
5、是很常用的,大家认真领会一下。 if(表达式1)表达式2; 是一条判断语句,根据表达式1运算结果来判断是否执行表达式2,只有在结果为1(真)的时候才会执行。 LedPort=~dat;是将dat值按位取反后送到P0口,“~”是按位取反运算符,比如第一次执行时dat的值为1即二进制的00000001,那么按位取反后就是11111611110,然后再送到P0口,这样,我们就可以点亮P0口上最低位的LED了。 dat<<=1;把dat的值左移1位,“<<”是左移,位数可以自己喜欢啦,不一定1位,比如dat<<=2就是左移2位。这个式子完整的表达应该是 dat=dat<<
6、1; 这样看比较清楚,先把dat左移1位再赋值给dat本身。在C里常有这种写法,称为复合赋值运算,含义就是变量与表达式先进行运算符所要求的运算,再把运算结果赋值给参与运算的变量,比如dat-=1;和式子dat=dat-1;是一致的,其它一些运算也可以写成这种方式,这里不再详细说明,以后用到就会明白。 这里的移位操作跟汇编不同,移位后,原来的位置是用0补充的,不象是汇编里的循环移位。比如dat如果是11111111那么执行dat<<=1;后,结果就变成11111110。大家想想,如果左移8位后结果是什么? 结果是0,呵呵,所以我们在开始放了一句判断if,如果dat是0就
7、将dat写成1,这样,这个跑马灯就可以周而复始的跑了。另外补充一下,C里也有循环移位的指令,但没有带进位位移位的指令,这里暂时不详细讲这个,以后用到再说。 .我们再来看看第3课里查表方式实现的跑马灯。 ucharcode161Tab[]是存放要显示的数值在ROM里,要引用里面的数据比如第11个只要直接写出Tab[10]即可(第1个是0),注意这语句里有个code字眼,如果没有这个code,那么定义的数值将存放在RAM里,占用RAM空间,可以在程序里进行存取(看下面图四的程序,里面就有这两个)。我们这里只放入跑马
此文档下载收益归作者所有