单片机课程设计?

LCALL DELAY

要LED的亮度有变化,一是施加一个可变电压源或者电流源,显然这个属于模拟控制过程。一是控制LED发光的时间,就是施加一个周期固定的,占空比可调的方波电压源,控制占空比可得到不同的亮度感知,这个属于数字控制过程。

单片机课程设计小结_单片机课程设计小结怎么写单片机课程设计小结_单片机课程设计小结怎么写


单片机课程设计小结_单片机课程设计小结怎么写


那么这里就选择控制占空比的方法就是了it key2=P3^1;。

PLC课程设计小结!

6结束语

本文利用PLC对磨机润滑系统的温度,压力等的与调节。通过PLC与单片机通信,实现对温度的外部显示,具有很好的经济性。本系统在系统中使用调试成功,实现了对温度、压力、油箱液位的自动采集和实时调节、报警等功能以及对主机的控制,为现代工业控制的生产起到了积极作用,整个系统结构简单,作方便、灵活,具有较好的实际价值和使用性。

由于设计水平有限和时间的仓促,本文中难免有错误和不妥之处,请给予批评指正。

7总LJMP TSR7结

通过本次设计,让我很好的锻炼了理论联系实际,与具体项目、课题相结合开发、设计产品的能力。既让我们懂得了怎样把理论应用于实际,又让我们懂得了在实践中遇到的问题怎样用理论去解决。

在本次设计中,我们还需要大量的以前没dula=0;有学到过的知识,于是图书馆和INTERNET成了我们很好的助手。在查阅资料的过程中,我们要判断优劣、取舍相关知识,不知不觉中我们查阅资料的能力也得到了很好的锻炼。我们学习的知识是有限的,在以后的工作中我们肯定会遇到许多未知的领域,这方面的能力便会使我们受益非浅。

在设计过程中,总是遇到这样或那样的问题。有时发现一个问题的时候,需要做大量的工作,花大量的时间才能解决。自然而然,我的耐心便在其中建立起来了。为以后的工作积累了经验,增强了信心。

单片机实验与课程设计

if(min==10)

在外部中断里面定义一个变量,

//晶振 12MHz

#include

//定时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;

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;

elMOV A,B_BIT ;取十位数se LED = ~LED;//按位取反即可;

}/ 定时50ms/

void timer1() interrupt 3

{TH1 = 0x3C;

TL1 = 0x0B0;

timer_cnt++;

{timer_cnt = 0;

timer_1sflag = !timer_1sflag;

/ 外部中断函数1/

void Extern() interrupt 2 using1//中断向量符号为2;

{extern_flag = 1;

}请采纳,参考!

单片机课程设计

}if(timer_cnt > 20)}

18B20是个温度传感器,通过单总线协议与CPU通信,CPU获得温度数据后通过IO口驱动LCD显示出来,按键可能用于显示模式的转换,比如摄氏/华氏,也许还有时钟什么的。不过这个显示部分并不是一个好的设计,U2、U3本来都可以省掉的,减少器件数量不仅仅是降低成本,还减少了故障率,从而提高可靠性

单片机课程设计

你写的要求太宽泛,我就随便给你两个,你参考下,根据你的题目修改下,这你应该可以的吧

总结随便找点,我也不知道你的具体要求,就不发了

给你个流水灯的,循环点亮程序

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

{s=0;DJNZ R2,LOOP1

MOV R2,#07H ;设置右移次数7次

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,#

DJNZ R5,$

DJNZ R6,DDJNZ R7,$2

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

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,#

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

单片机课程设计

LCALL DELAY

附2:程序

ORG 0000H

LJMP START

ORG 0003H

LJMP JIA

ORG 0013H

LJMP JIAN

ORG 0030H

FLAG1 BIT F0 ;DS18B20存在标志位

DQ BIT P2.2

TEMPER_L EQU 29H

TEMPER_H EQU 28H

A_BIT EQU 35H

B_BIT EQU 36H

START:

MOV IE,#85H

MOV 30H,#30

SHEZHI:MOV R1,#30H

ACALL DISPLAY

MOV P2,#0FFH

MOV A,P1.熟练掌握C51系统仿真开发系统的应用。2

MOV C,ACC.0

JNC SHEZHI

LJMP MAIN

DISPLAY:MOV A,@R1;将29H中的十六进制数转换成10进制

MOV B,#10 ;10进制/10=10进制

DIV AB

MOV B_BIT,A ;十位在A

MOV A_BIT,B ;个位在B

MOV DPTR,#TAB ;指定查表启始地址

SETB P3.7 ;选中个数码管

MOV A,A_BIT ;取个位数

MOVC A,@A+DPTR ;查个位数的7段代码

MOV P1,A ;送出个位的7段代码

LCALL DELAY ; 调用延时

CLR P3.7

SETB P3.6 ;选中第二个数码管

MOVC A,@A+DPTR ;查十位数的7段代码

MOV P1,A ;送出十位的7段代码

LCALL DELAY

CLR P3.6

RET

JIA:

MOV P2,#0FFH

MOV A,P2

MOV C,ACC.0

JC OUT

INC @R1

OUT:

RETI

JIAN:

MOV P2,#0FFH

MOV A,P2

MOV C,ACC.0

JC OUT1

DEC @R1

OUT1:

RETI

DELAY: ;延时子程序

MOV R5,#120

NOP

NOP

D1: MOV R6,#100

D2: DJNZ R6,D2

DJNZ R5,D1

RET

;主程序开始

MAIN:

LCALL INIT_18B20

;LCALL RE_CONFIG

LCALL GET_TEMPER

LJMP CHANGE

INIT_18B20: SETB DQ

NOP

CLR DQ

MOV R0,#0FBH

TSR1: DJNZ R0,TSR1 ;延时

SETB DQ

MOV R0,#25H

TSR2: JNB DQ ,TSR3

DJNZ R0,TSR2

TSR3: SETB FLAG1 ;置标志位,表明DS18B20存在

CLR P0.5 ;二极管指示

AJMP TSR5

TSR4: CLR FLAG1

TSR5: MOV R0,#06BH

TSR6: DJNZ R0,TSR6

TSR7:SETB DQ ;表明不存在

RET

;读转换后的温度值

GET_TEMPER:

SETB DQ

LCALL INIT_18B20

JB FLAG1,TSS2

RET ;若不存在则返回

TSS2: MOV A,#0CCH ;跳过ROM

LCALL WRITE_18B20

MOV A,#44H ;发出温度转换命令

LCALL WRITE_18B20

;LCALL DISPLAY ;延时

LCALL INIT_18B20

MOV A,#0CCH ;跳过ROM

LCALL WRITE_18B20

MOV A,#0BEH ;发出读温度换命令

LCALL WRITE_18B20

LCALL READ2_18B20 ;读两个字节的温度

RET

;写DS18B20程序

WRITE_18B20:

MOV R2,#8

CLR C

WR1:

CLR DQ

MOV R3,#6

DJNZ R3,$

RRC A

MOV DQ,C

MOV R3,#23

DJNZ R3,$

SETB DQ

NOP

DJNZ R2,WR1

SETB DQ

RET

;读18B20程序,读出两个字节的温度

READ2_18B20:

MOV R4,#2 ;低位存在29 H,高位存在28H

MOV R1,#29H

RE00: MOV R2,#8

RE01: CLR C

SETB C

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#7

DJNZ R3,$

MOV C,DQ

MOV R3,#23

DJNZ R3,$

RRC A

DJNZ R2,RE01

MOV @R1,A

DEC R1

DJNZ R4,RE00

RET

;读出的温度进行数据转换

CHANGE: MOV A,29H

MOV C,28H.0 ;将28H中的位移入C

RRC A

MOV C,28H.1

RRC A

MOV C,28H.2

RRC A

MOV C,28H.3

RRC A

MOV 29H,A

MOV R1,#29H

LCALL DISPLAY ;调用数码管显示子程序

CLR C

MOV A,30H

SUBB A,29H

JC BJ

LJMP MAIN

BJ:CPL P0.0

CPL P0.1

LJMP MAIN

;

D1MS: MOV R7,#80 ;1MS延时(按12MHZ算)

RET

;

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

单片机课程设计的介绍

bit timer_1sflag;

单片机课程设计,是很多高校,电子信息专业、自动化专业、通信专业等学生在校学习期间,必须完成的一项重要的动手实践活动,但现在很多高校的课程设计流于形式,是典型的欺软怕硬。凌阳教育根据对大学生整体动手能力和实践能力的培养要求,精心选择了单片机课程设计与工程应用实例,典型实例包括了单片机接口、A/D转换、D/A转换、道路交通灯控制、温度测量、微机通信、LED点阵字符显示、电子万年历、等。使学生在学习完后,能真正从事单片机或嵌入式的开发工作。包括项目概述、项目要求、系统设计、硬件设计、软件设计、系统仿真及调试,提供完整的程序清单和电路原理图。采了实际应用项目实例,力求理论和实践相结合,同时考虑培养学生解决工程实际问题和综合应用的能力。典型实例都来自实际工程应用,有助于学生动手能力的判断程序(如果温度超过设定区则报警)培养和锻炼。

单片机课程设计

void keyscan();

你说的也不具体些。

}void display()

按键定义的话,很简单,一个增一个减,两个够了

读按键技术的话,书上很多,就是读到有按键输入,延时10ms在读取按键,仍在的话,输入有效,进入按键处理。比如增加占空比或减少占空比。

至于PWM脉宽调制,有两个要素频率和占空比吧。通过电路可以转换成电压。

我以前用HOLTEK单片机做过白炽灯调光的,用可控硅调节,用PWM调节可控硅的占空比就可以调光,但导通角调的不好灯就会闪烁。

QQ5188

你需要指导什么呢?这是个很初级的课题啊。

按键 和 显示 都能在网上找到编好的程序模块,修改一下直接就能用。PWM是占空比之类的东西,调节方波的占空比就能调节灯光亮暗,也就是延时时间的问题。。可以用一个算法,外面用变阻器输入单片机一个电压信号,经过运算转化成一个适合的数,用来作为调用延迟子程序的参数。。

谁知道啊!!!!??

单片机的课程设计

}}

一年前写的,看看吧,好像是6位数码管,三个按键的

#include

#define uchar unsigned char

#define uint unsigned int

//

uchar code tempdu[]={0xbd,0x84,0xd9,0xcd,0xe4,0x6d,0x7d,0x85,0xfd,0xed,0x0};

uchar code tempwe[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

//

/位定义/

it dula=P2^6; //数码管段选

it wela=P2^7;

it key1=P3LOOP2: RRC A ;右移1位^0;

it key3=P3^2;

uint ms;

uchar s,min,id;

void timer0_init();

void display();

void delay(uint xms);

void main()

{timer0_init();

while(1)

{keyscan();

display();

if(id==1)

{TR0=1;

}else

{TR0=0;

}void timer0() interrupt 1

{TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

ms++;

if(ms==1000)

{ms=0;

s++;

if(s==60)

min++;

{min=0;

s=0;

ms=0;

void keyscan()

{if(key1==0)

{if(key1==0)

{while(key1==0)

{TR0=1;

display();

}TR0=0;

if(key2==0)

{if(key2==0)

{while(key2==0)

{display();

}id++;

if(id==2)

{id=0;

}if(key3==0)

{if(key3==0)

{while(key3==0)

{display();

}if(TR0!=1)

{TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

ms=0;

s=0;

min=0;

void timer0_init()

{TMOD=0x01;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

EA=1;

ET0=1;

TR0=0;

}void delay(uint xms)

{uint x,y;

for(x=xms;x>0;x--)

for(y=110;y>0;y--);

{P0=0x0;

P0=0xff;

wela=1;

P0=tempwe[1]; //要显示的数码管

dula=1;

P0=tempdu[min];//要显示的数

delay(1);

P0=0xff;

wela=1;

P0=tempwe[1]; //要显示的数码管

dula=1;

P0=0x02; //要显示的数//小数点显示

delay(1);

P0=0xff;

wela=1;

P0=tempwe[2]; //要显示的数码管

dula=1;

P0=tempdu[s/10];//要显示的数

delay(1);

P0=0xff;

wela=1;

P0=tempwe[3]; //要显示的数码管

dula=1;

P0=tempdu[s%10];//要显示的数

delay(1);

P0=0xff;

wela=1;

P0=tempwe[3]; //要显示的数码管

dula=1;

P0=0x02; //要显示的数//小数点显示

delay(1);

P0=0xff;

wela=1;

P0=tempwe[4]; //要显示的数码管

dula=1;

P0=tempdu[ms/100];//要显示的数

delay(1);

P0=0xff;

wela=1;

P0=tempwe[5]; //要显示的数码管

dula=1;

P0=tempdu[ms%100/10];//要显示的数

delay(1);

P0=0xff;

wela=1;

P0=tempwe[6]; //要显示的数码管

dula=1;

P0=tempdu[ms%10];//要显示的数

delay(1);

}求采纳为满意回答。