本文目录一览

1,keil单片机跑马灯实验报告

原发布者:喜欢HQ学号14142200277序号19单片机原理与接口技术实验报告实验项目序号一实验项目名称跑马灯实验姓名卢志雄专业电子信息工程班级电信14-2BF完成时间2016年4月2日一、实验内容实验内容为3项,其中第1、2项必做。1、基本的流水灯。根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。每点亮一个LED,采用软件延时一段时间。2、简单键控的流水灯。不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。松手后,又按正序点亮流水灯。3、键控的流水灯。上电,不点亮LED,按一下K1键,按正序点亮流水灯。按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。二、电路原理图图1跑马灯实验电路原理图三、程序流程图图2简单键控的流水灯程序流程图四、源程序1、基本的流水灯#include#defineuintunsignedint#defineucharunsignedcharvoiddelay(j)//延时函数datauintj;{datauinti;while(j--)for(i=0;i<250;i++);}voidmain()//主函数{datauchara;a=1;
是做实物还是用protues仿真就行 这个是简单的单片机驱动数码设计
这个程序有点问题,循环一次后就会跑飞了。最好用while循环while(1)P2=0x01;for(i=0;i<8;i++)}

keil单片机跑马灯实验报告

2,单片机实验设计

;-------------------------------------;下列程序,经过编译、仿真,符合要求:;------------------------------------- ORG 0000H SJMP START ORG 000BH SJMP T0_INT;-------------------------------------START: MOV TMOD, #01H MOV TH0, #9EH MOV TL0, #58H ;50ms@6MHz SETB TR0 SETB ET0 SETB EA MOV R2, #10LOOP: CLR PSW.5 CLR P1.1 ;输出0,这是一个周期的开始. JNB PSW.5, $ ;等待500ms CLR PSW.5 JNB PSW.5, $ ;再等待500ms CLR PSW.5 MOV C, P3.3 ;如果P3.3为低, CPL C MOV P1.1, C ;就输出高,这就是50%占空比. JNB PSW.5, $ ;继续等待500ms CLR PSW.5 SETB P1.1 ;如果到这里才输出高,就是25%占空比. JNB PSW.5, $ ;输出高500ms SJMP LOOP;-------------------------------------T0_INT: ;50ms执行一次. MOV TH0, #9EH ;重新赋初始值. MOV TL0, #58H ;50ms@6MHz DJNZ R2, T0_END ;不到10次,转到退出.; ;下列指令都是每隔500ms执行一次. MOV R2, #10 ;重新设置. SETB PSW.5 ;每隔500ms,设置一次1T0_END: RETI;------------------------------------- END ;------------------------------------- 编译后的机器语言,仅仅用了74字节
教程目录: 第一课:初识单片机 (2007-09-25) 第二课:mcs-51单片机简述 (2007-09-27) 第三课:单片机相关常用名词解释 (2007-09-27) 第四课:计算机中数的表示及运算 (2007-09-25) 第五课:常用逻辑电路 (2007-09-25) 第六课:51单片机的结构及其组成 (2007-09-25) 第七课:51单片机的引脚 (2007-09-25) 第八课:8051单片机i/o引脚工作原 (2007-09-25) 第九课:8051单片机的存储器结构 (2007-09-25) 第十课:编码及译码器工作原理 (2007-09-25) 第十一课:存储器的存储原理 (2007-09-25) 第十二课:51单片机的特殊功能寄

单片机实验设计

3,单片机课程设计 单片机温度的检测与显示的设计

用18b20做很简单啊。温度的子程序给你,,你重定义一下接口,主程序已经调用出温度了,你送到显示就行了。。/* 延时t毫秒 */void delay(uint t) uint i; while(t--) /* 对于11.0592M时钟,约延时1ms */ for (i=0;i<125;i++) }} /* 产生复位脉冲初始化DS18B20 */void TxReset(void) uint i; DQ = 0; /* 拉低约900us */ i = 100; while (i>0) i--; DQ = 1; // 产生上升沿 i = 4; while (i>0) i--;}/* 等待应答脉冲 */void RxWait(void) uint i; while(DQ); while(~DQ); // 检测到应答脉冲 i = 4; while (i>0) i--;}/* 读取数据的一位,满足读时隙要求 */ bit RdBit(void) uint i; bit b; DQ = 0; i++; DQ = 1; i++;i++; // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效 b = DQ; i = 8; while(i>0) i--; return (b);}/* 读取数据的一个字节 */uchar RdByte(void) uchar i,j,b; b = 0; for (i=1;i<=8;i++) j = RdBit(); b = (j<<7)|(b>>1); } return(b);}/* 写数据的一个字节,满足写1和写0的时隙要求 */void WrByte(uchar b) uint i; uchar j; bit btmp; for(j=1;j<=8;j++) btmp = b&0x01; b = b>>1; // 取下一位(由低位向高位) if (btmp) /* 写1 */ DQ = 0; i++;i++; // 延时,使得15us以内拉高 DQ = 1; i = 8; while(i>0) i--; // 整个写1时隙不低于60us } else /* 写0 */ DQ = 0; i = 8; while(i>0) i--; // 保持低在60us到120us之间 DQ = 1; i++; i++; } }}/* 启动温度转换 */void convert(void) TxReset(); // 产生复位脉冲,初始化DS18B20 RxWait(); // 等待DS18B20给出应答脉冲 delay(1); // 延时 WrByte(0xcc); // skip rom 命令 WrByte(0x44); // convert T 命令}/* 读取温度值 */void RdTemp(void) TxReset(); // 产生复位脉冲,初始化DS18B20 RxWait(); // 等待DS18B20给出应答脉冲 delay(1); // 延时 WrByte(0xcc); // skip rom 命令 WrByte(0xbe); // read scratchpad 命令 tplsb = RdByte(); // 温度值低位字节(其中低4位为二进制的“小数”部分) tpmsb = RdByte(); // 高位值高位字节(其中高5位为符号位) }void main(void) do delay(1); // 延时1ms convert(); // 启动温度转换,需要750ms delay(1000); // 延时1s RdTemp(); // 读取温度 } while(1);}
可以用proteus仿真,懂事电子设计 Vgz
有没有电路图啊 急用啊 谢谢

单片机课程设计 单片机温度的检测与显示的设计

4,求救单片机的实验报告51单片机

一、实验目的: 通过设计电子时钟的综合实验掌握单片机编程的基本思想,以及中断、定时程序的基本编写方法。 二、实验内容: 利用定时计数器,设计一个电子时钟,从左到右依次显示时分秒。有两种方法实现,一种是在中断程序中计数,产生时分秒计数,送到显示缓冲区。另一种是中断程序每一秒清除一个位变量,而主程序通过监视位变量的变化来知道每秒的时间。 提高要求: 1、 可以加入时间调整程序,使用两个或三个按钮,调节当前的时间。类似平常使用的电子表。可以让正在调整的位闪烁显示。 2、 可以加入一个闹钟设置,当所定的时间到时,产生断续的蜂鸣声。 三、实验过程: 编程基本思路:在主程序里负责读取存储区的时分秒的值,然后送到显示缓冲区,并且查询秒的存储区,当为0时说明满一分,调用报时子程序;在中断程序中计数,产生时分秒计数,定时器采用方式一,每100ms中断一次,中断10次 为一秒。 程序如下: org 0000h ljmp main ;转主程序 org 000bh ajmp it0p ;转定时器T0中断 org 0100h main: mov tmod,#01h ;T0工作在方式1 mov 20h,#0ah clr a mov 50h,a mov 51h,a mov 52h,a ;清0存放秒分时值的单元 setb et0 ;允许T0中断 setb ea ;允许中断 mov th0,#3ch mov tl0,#0b0h ;计数器赋初值 setb tr0 ;启动计数器T0 first: clr p1.0 lcall bell mov a,52h anl a,#0fh mov 78h,a mov a,52h anl a,#0f0h swap a mov 79h,a ;秒的高低位送79H,78H mov a,51h anl a,#0fh mov 7ah,a mov a,51h anl a,#0f0h swap a mov 7bh,a ;分的高低位送7BH,7AH mov a,50h anl a,#0fh mov 7ch,a mov a,50h anl a,0f0h swap a mov 7dh,a ;时的高低位送7DH,7CH dir: ;显示子程序 mov r0,78h ;置缓冲器指针初值 mov r3,01h ;位选码初值送R3 mov a,3 ld0: mov dptr,8002h movx @dptr, mov dptr,8004h mov a,r0 ;显示数据送A add a,0fh ;加偏移量 movc a,a+pc ;查表取段码 dir1: movx @dptr,a acall delay ;调用延时1m秒的程序 inc r0 ;指下一个显示数据单元 mov a,3 ;位选码送A jb acc.5,d1 ;看是否扫描到最右 rl a ;让下一个LED亮 mov r3,a ajmp ld0 ld1: ljmp first table: db 3fh, 06h, 5bh, 4fh, 66h, 6dh db 7dh, 07h, 7fh, 6fh ;段码表数字 0到9 delay: ;延时1m秒的子程序 mov r7,02h dl: mov r6,0ffh dl1: djnz r6,l1 djnz r7,dl ret it0p: ;T0中断服务子程序 push psw push a mov th0,#3ch mov tl0,#0b0h ;定时器赋初值 djnz 20h,return ;看10次计数是否到,未到恢复现场 mov 20h,0ah ;到了则重新设置下次10次计数值 mov a,01h add a,52h ;秒值加1 da a mov 52h,a cjne a,#60h,return ;看是否到60秒,未到就恢复现场 mov 52h,#00h mov a,#01h add a,51h ;到了60秒就分钟加1,秒位清0 da a mov 51h,a cjne a,#60h,return ;看是否到60分,未到就恢复现场 mov 51h,#00h mov a,#01h add a,50h ;到了60分就分钟加1,分位清0 da a mov 50h,a cjne a,#24,return mov 50h,#00h ;到了24小时就把小时清0 return: pop a pop psw reti bell: ;报时子程序 push a mov a,42h cjne a,#00h,back setb p1.0 back: pop a ret end 实验结果: 执行程序后从0开始计时,满60秒进一分,并且报时一次,与预想的结果一样。开始的时候显示时会出乱码,不知道是怎么回事,后来问了老师才知道是数的进制问题,加了一条 DA A的指令就可以了。还有刚开始的时候根本进不了中断定时的程序,仔细检查之后发现自己在开关中断时设置错了。 报时部分是做了,但是键盘部分没有做出来,那部分掌握的不太好,没有很仔细的看书,一个小小的遗憾。 四、实验总结: 这是这个学期的最后一次实验,是一个综合实验。开始还以为特别难,后来慢慢也就做下来了,虽然做的不是特别好。通过一个学期的学习发现《单片机》的确是一门很有用的课程,对今后的学习工作有很大的帮助,因为单片机目前在社会中有在和极其广泛的用途,各个地方都离不开它的。但是我觉得就我们在课堂上学到的这点知识还是极其有限的,更多的东西还靠我们自己去课下学习。老师只起到一个引导我们学习的作用,关键还是在于我们自己,这就是所谓的“师傅领进门,修行在个人”吧。冰冻三尺非一日之寒,滴水穿石非一时之功,谨以此自勉!

5,单片机实验与课程设计

在外部中断里面定义一个变量,//晶振 12MHz #include<reg52.h>//定时50ms#define TH = (65536 - 50000)>>8 // 高位初值;#define TL = (65536 - 50000)%256// 低位初值;#define LED P0 //设高电平点亮LED;unsigned char timer_cnt = 0;unsigned char extern_flag = 0;bit timer_1sflag;void main() TMOD = 0x10;//使用定时器1 EA = 1; ET1 = 1; TR1 = 1; TH1 = TH;// 高位初值; TL1 = TL;// 低位初值; EX0 = 1;//开启外部中断; while(1) if(extern_flag) if(timer_1sflag)LED = 0X55; else LED = ~LED;//按位取反即可; } }}/*************** 定时50ms****************************/void timer1() interrupt 3 TH1 = 0x3C; TL1 = 0x0B0; timer_cnt++; if(timer_cnt > 20) timer_cnt = 0; timer_1sflag = !timer_1sflag; }}/*************** 外部中断函数1*******************/void Extern() interrupt 2 using1//中断向量符号为2; extern_flag = 1;}请采纳,参考!
//假设晶振12MHZ,P1控制LED低电平亮#include "reg51.h"unsigned int YSJS=0;void main(void) TMOD |= 0X10; //定时器1工作于方式1,16位定时器 TH1 = 0XFF; //定时器1定时时间=500uS TL1 = 0X06; ET1 = 1; //使能定时器1中断 IT1=1; //负跳变触发 EX1=1; //开外部中断1 EA =1; //开总中断 P1 = 0XFF; while(1) }}void INT0() interrupt 0 P1 = 0X55; TR1 = 1; //开启定时器1}void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组 TH1 = 0XFF; //定时器1定时时间=500us TL1 = 0X06; YSJS++; if(YSJS==2000) //500uS*2000=1000000us=1s P1 = P1 & 0XFF; YSJS = 0 }}
你写的要求太宽泛,我就随便给你两个,你参考下,根据你的题目修改下,这你应该可以的吧 总结随便找点,我也不知道你的具体要求,就不发了 给你个流水灯的,循环点亮程序 org 0000h jmp main org 0030h main: mov a,#0ffh clr c rlc a; mov p2,a call delay loop: mov r2,#07h loop1: rlc a mov p2,a call delay djnz r2,loop1 mov r2,#07h ;设置右移次数7次 loop2: rrc a ;右移1位 mov p2,a ;输出到p2 call delay ; djnz r2,loop2 ;右移7次 jmp loop delay: mov r7,#20 ;延时0.3s d1: mov r6,#30 d2: mov r5,#250 djnz r5,$ djnz r6,d2 djnz r7,d1 ret end 数码管的,可以循环显示012345678abcdef的,共阳极接法 org 0000h ljmp main org 0030h main: nop start: mov r2,#0 mov r5,#16 next: mov dptr,#tab mov a,r2 movc a,@a+dptr mov p2,a inc r2 lcall delay loop: djnz r5,next mov r5,#16 mov r2,#0 jmp start delay: mov r0,#10 ;延时0.5s delay0: mov r7,#100 delay1: mov r6,#250 djnz r6,$ djnz r7,delay1 djnz r0,delay0 ret tab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h db 88h,83h,0c6h,0a1h,86h,8eh end

文章TAG:单片机  课程  课程设计  设计  单片机课程设计实验报告  
下一篇