当前位置:文档之家› 基于单片机温度检测LCD显示课程设计报告

基于单片机温度检测LCD显示课程设计报告

基于单片机温度检测LCD显示课程设计报告
基于单片机温度检测LCD显示课程设计报告

大连民族学院

单片机系统课程设计

题目:温度计的设计

班级:电子105

姓名:赵萌

同组人:张瑛笛

指导教师:李绍民

设计日期:

一设计内容及要求

设计内容:基于单片机的室内温度检测LCD显示

要求:测量温度55℃—125℃

温度上下限TH:32℃TL:16℃

温度报警:超出温度上下限BEEP报警

二设计方案

测温部分:采用18B20作为温度传感器,有一个由高低电平触发的且不因掉电而丢失的报警功能。

控制部分:89S52最小系统

显示部分:1602液晶显示,模块内的字符发生存储器存储了160个不同的点阵图形,先是方便,同时好可以进行时间的显示。

三硬件系统设计

AT89S52是一个低功耗,高性能CMOS 8位

单片机,片内含8k Bytes ISP(In-system

programmable)的可反复擦写1000次的Flash只读

程序存储器,器件采用ATMEL公司的高密度、

非易失性存储技术制造,兼容标准MCS -51指令

系统及80C51引脚结构,芯片内集成了通用8位

中央处理器和ISP Flash存储单元,功能强大的微

型计算机的AT89S52可为许多嵌入式控制应用系

统提供高性价比的解决方案。

? ?A T89S52具有如下特点:40个引脚,8k Bytes

Flash片内程序存储器,256 bytes的随机存取数据

存储器(RAM),32个外部双向输入/输出(I/O)

口,5个中断优先级2层中断嵌套中断,2个16

位可编程定时计数器,2个全双工串行通信口,看

门狗(WDT)电路,片内时钟振荡器。

电源

时钟

晶振原理图

I/O接口

外围电路工作原理及硬件图

四软件系统设计

软件流程框图

系统设计原理:

本次课程设计是基于单片

机的数字温度计设计,在开始

课程设计的时候我们要理解并

掌握对单片机的开发,学会使

用KEIL及Proteus等仿真软件。

根据设计任务要求选择好器

件,编写好程序运行成功之后

进行软件联调,验证系统是否

正确。通过筛选,我们组选用

单片机AT89S52作为主控制系

统;用1602液晶显示模块芯片

作为温度数据显示装置;智能

温度传感器采用DS18B20器件

作为测温电路主要组成部分。

五仿真调试

(1)Keil C51单片机软件开发系统的整体结构

C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、

连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其

它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编

译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,

也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51

或tScope51使用进行源代码级调试,也可由仿真器使用直接对目

标板进行调试,也可以直接写入程序存贮器如EPROM中。

(2)使用独立的Keil仿真器时,注意事项

●仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插

孔中换插其他频率的晶振。

●仿真器上的复位按钮只复位仿真芯片,不复位目标系统。

●仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内

ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿

真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其

CPU的/EA引脚接至低电平)的目标系统中使用。

●调试结果

(3)结果分析

在运行仿真结果时通过改变温度传感器DS18B20的温度,然后调用各种子函数,可以改变液晶显示1602的第二行显示数据,说明程

序编写正确。

(4)系统设计电路的特点和方案的优缺点

我们组设计的数字温度计系统知识运用简单的AT89S52芯片的I/O口传输功能,通过几个小的读数据、传递数据、延时子函数实现

温度的读取传输功能,是比较简单,容易实现的,所以我们的系统只

是实现了一些简单的功能,系统整体来说比较简易,但好像这个温度

计没有多大的应用价值,所以我们后续分析觉得这个系统可以加一个

温度复位系统提高AT89S52芯片的功能价值,也提高数字温度计的智

能价值,还可以增加一个报警子函数,实现智能数字温度计更高的应

用价值。

六结论

虽然基本功能已经做好了,但还可以有很多的扩展功能,如串口设计和时钟显示,由于时间有限,但对于单片机的设计还在继续…

参考文献

附录一

程序代码:

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit DQ = P2^2; //定义DS18B20端口DQ

sbit BEEP=P2^3 ; //蜂鸣器驱动线

bit presence,flag;

bit compare_th,compare_tl,alarm_on_off=0,temp_th,temp_tl;

sbit LCD_RS = P3^5;

sbit LCD_RW = P3^6;

sbit LCD_EN = P3^4;

uchar code cdis1[ ] = {" READ_ROMCORD "};

uchar code cdis2[ ] = {" "};

uchar code cdis3[ ] = {" DS18B20 ERR0R "};

uchar code cdis4[ ] = {" PLEASE CHECK "};

uchar code cdis5[ ] = {" TEMP: "};

uchar code cdis6[ ] = {"TH: TL: "};

unsigned char data temp_data[2] = {0x00,0x00};

unsigned char data temp_alarm[2] = {0x20,0x10};

unsigned char data display[5] = {0x00,0x00,0x00,0x00,0x00}; //温度值显示unsigned char data display1[3] = {0x00,0x00,0x00}; //温度报警值显示unsigned char data RomCode[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; unsigned char code mytab1[8] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00}; #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

unsigned char Temp,temp_comp,timecount,count;

unsigned char crc;

void Disp_Temp_alarm(uchar addr,uchar num);

void spk(uchar addr);

void set_temp_alarm();

void temp_compare();

void beep();

/*******************************************************************/ void delay1(int ms)

{

unsigned char y;

while(ms--)

{

for(y = 0; y<250; y++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

/******************************************************************/ /* */ /*检查LCD忙状态*/ /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。*/ /* */ /******************************************************************/ bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

delayNOP();

result = (bit)(P0&0x80);

LCD_EN = 0;

return(result);

}

/*******************************************************************/ /* */ /*写指令数据到LCD */

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。*/ /* */ /*******************************************************************/ void lcd_wcmd(uchar cmd)

{

delay1(10);

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();

_nop_();

P0 = cmd;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

/*******************************************************************/ /* */ /*写显示数据到LCD */

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。*/ /* */ /*******************************************************************/ void lcd_wdat(uchar dat)

{

delay1(10);

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

P0 = dat;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

/*******************************************************************/ /* */ /*自定义字符写入CGRAM */

/* */ /*******************************************************************/ void writetab()

{

unsigned char i;

lcd_wcmd(0x40); //写CGRAM

for (i = 0; i< 8; i++)

lcd_wdat(mytab1[i]);

for (i = 0; i< 8; i++)

lcd_wdat(mytab2[i]);

}

/*******************************************************************/ /* */ /* LCD初始化设定*/

/* */ /*******************************************************************/ void lcd_init()

{

delay1(15);

lcd_wcmd(0x01); //清除LCD的显示内容

lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据

delay1(5);

lcd_wcmd(0x38);

delay1(5);

lcd_wcmd(0x38);

delay1(5);

lcd_wcmd(0x0c); //显示开,关光标

delay1(5);

lcd_wcmd(0x06); //移动光标

delay1(5);

lcd_wcmd(0x01); //清除LCD的显示内容

delay1(5);

writetab(); //自定义字符写入CGRAM

}

/*******************************************************************/ /* */ /* 设定显示位置*/ /* */ /*******************************************************************/ void lcd_pos(uchar pos)

{

lcd_wcmd(pos | 0x80); //数据指针=80+地址变量

}

/*******************************************************************/ /* */ /*us级延时函数*/ /* */ /*******************************************************************/ void Delay(unsigned int num)

{

while( --num );

}

/*******************************************************************/ /* */ /*初始化ds1820 */ /* */ /*******************************************************************/ Init_DS18B20(void)

{

DQ = 1; //DQ复位

Delay(8); //稍做延时

DQ = 0; //单片机将DQ拉低

Delay(90); //精确延时大于480us

DQ = 1; //拉高总线

Delay(8);

presence = DQ; //如果=0则初始化成功=1则初始化失败

Delay(100);

DQ = 1;

return(presence); //返回信号,0=presence,1= no presence

}

/*******************************************************************/ /* */ /* 读一个字节*/ /* */ /*******************************************************************/ ReadOneChar(void)

{

unsigned char i = 0;

unsigned char dat = 0;

for (i = 8; i > 0; i--)

{

DQ = 0; // 给脉冲信号

dat >>= 1;

DQ = 1; // 给脉冲信号

if(DQ)

dat |= 0x80;

Delay(4);

}

return (dat);

}

/*******************************************************************/ /* */ /* 写一个字节*/ /* */ /*******************************************************************/ WriteOneChar(unsigned char dat)

{

unsigned char i = 0;

for (i = 8; i > 0; i--)

{

DQ = 0;

DQ = dat&0x01;

Delay(5);

DQ = 1;

dat>>=1;

}

}

/*******************************************************************/ /* */ /* 温度报警值写入DS18B20 */

/* */

/*******************************************************************/ Write_Temperature_alarm(void)

{

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0x4e); //将设定的温度报警值写入DS18B20

WriteOneChar(temp_alarm[0]); //写TH

WriteOneChar(temp_alarm[1]); //写TL

WriteOneChar(0x7f); //12位精确度

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0x48); //把暂存器里的温度报警值拷贝到EEROM }

/*******************************************************************/ /* */ /* 读取64位序列码*/ /* */ /*******************************************************************/ Read_RomCord(void)

{

unsigned char j;

Init_DS18B20();

WriteOneChar(0x33); // 读序列码的操作

for (j = 0; j < 8; j++)

{

RomCode[j] = ReadOneChar() ;

}

}

/*******************************************************************/ /* */ /*DS18B20的CRC8校验程序*/

/* */ /*******************************************************************/ uchar CRC8()

{

uchar i,x; uchar crcbuff;

crc=0;

for(x = 0; x <8; x++)

{

crcbuff=RomCode[x];

for(i = 0; i < 8; i++)

{

if(((crc ^ crcbuff)&0x01)==0)

crc >>= 1;

else {

crc ^= 0x18; //CRC=X8+X5+X4+1

crc >>= 1;

crc |= 0x80;

}

crcbuff >>= 1;

}

}

return crc;

}

/*******************************************************************/ /* */ /* 数据转换与显示*/ /* */ /*******************************************************************/ Disp_RomCode(uchar H_num)

{

uchar j;

if(H_num==1)

lcd_pos(0x00);

if(H_num==2)

lcd_pos(0x40);

for(j=0;j<8;j++)

{

Temp = RomCode[j];

display[0]=((Temp&0xf0)>>4);

if(display[0]>9)

{ display[0]=display[0]+0x37;}

else{display[0]=display[0]+0x30;}

lcd_wdat(display[0]); //高位数显示

display[1]=(Temp&0x0f);

if(display[1]>9)

{display[1]=display[1]+0x37;}

else {display[1]=display[1]+0x30;}

lcd_wdat(display[1]); //低位数显示

}

}

/*******************************************************************/ /* */ /* 读取温度*/ /* */ /*******************************************************************/ Read_Temperature(void)

{

uchar i;

TR0=0; //关中断,防止读数错误

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0x44); //启动温度转换

Init_DS18B20();

WriteOneChar(0x55); //匹配ROM命令

for(i=0;i<8;i++)

WriteOneChar(RomCode[i]);

WriteOneChar(0xBE); //读取温度寄存器

temp_data[0] = ReadOneChar(); //温度低8位

temp_data[1] = ReadOneChar(); //温度高8位

temp_alarm[0] = ReadOneChar(); //温度报警TH

temp_alarm[1] = ReadOneChar(); //温度报警TL

temp_comp=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);

//取温度整数值

TR0=1; //开中断

}

/*******************************************************************/ /* */ /* 数据转换与温度显示*/ /* */ /*******************************************************************/ Disp_Temperature()

{

uchar s=0;

if(temp_data[1]>127) //温度为负值

{

temp_data[0]=(~temp_data[0])+1; //取反加一,将补码变成原码

if((~temp_data[0])>=0xff)

temp_data[1]=(~temp_data[1])+1;

else temp_data[1]=~temp_data[1];

s=1;

}

display[4]=temp_data[0]&0x0f;

display[0]=(display[4]*10/16)+0x30;

display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);

display[3]=display[4]/100+0x30;

display[1]=display[4]%100;

display[2]=display[1]/10+0x30;

display[1]=display[1]%10+0x30;

if(display[3]==0x30) //高位为0,不显示

{

display[3]=0x20;

if(display[2]==0x30) //次高位为0,不显示

display[2]=0x20;

}

if(s)

display[3]=0x2d; //显示负号

lcd_pos(0x07);

lcd_wdat(display[3]); //百位数显示

lcd_wdat(display[2]); //十位数显示

lcd_wdat(display[1]); //个位数显示

lcd_wdat('.');

lcd_wdat(display[0]); //小数位数显示

lcd_wdat(0x00); //显示自定义字符

lcd_wdat('C'); //显示C

}

/*******************************************************************/ /* */ /* 蜂鸣器响一声*/ /* */ /*******************************************************************/ void beep()

{

unsigned char y;

for (y=0;y<100;y++)

{

Delay(70);

BEEP=!BEEP; //BEEP取反

}

BEEP=1; //关闭蜂鸣器

Delay(25000);

}

/*******************************************************************/ /* */ /* ROMCORD 显示菜单*/

/* */ /*******************************************************************/ void RomCode_Menu ()

{

uchar m;

lcd_init(); //初始化LCD

lcd_pos(0); //设置显示位置为第一行

for(m=0;m<16;m++) //显示字符

lcd_wdat(cdis1[m]);

Read_RomCord(); //读取64位序列码

CRC8(); //CRC效验

if(crc==0) //CRC效验正确

{

Disp_RomCode(2); //显示64位序列码

}

}

/*******************************************************************/ /* */ /* DS18B20 ERROR 显示菜单*/

/* */ /*******************************************************************/ void Error_Menu ()

{

uchar m;

lcd_init(); //初始化LCD

lcd_pos(0); //设置显示位置为第一行的第1个字符

for(m=0;m<16;m++)

lcd_wdat(cdis3[m]); //显示字符

lcd_pos(0x40); //设置显示位置为第二行第1个字符

for(m=0;m<16;m++)

lcd_wdat(cdis4[m]); //显示字符

}

/*******************************************************************/ /* */ /* DS18B20 正常显示菜单*/ /* */ /*******************************************************************/ void Natural_Menu ()

{

uchar m;

lcd_init(); //初始化LCD

lcd_pos(0); //设置显示位置为第一行的第1个字符

for(m=0;m<16;m++)

lcd_wdat(cdis5[m]); //显示字符

lcd_pos(0x40); //设置显示位置为第二行第1个字符

for(m=0;m<16;m++)

lcd_wdat(cdis6[m]); //显示字符

Read_Temperature();

Disp_Temp_alarm(0x43,0); //显示TH值

Disp_Temp_alarm(0x4b,1); //显示TL值

Disp_Temperature(); //显示实时温度值

}

/*********************************************************/ // 显示报警温度

/*********************************************************/ void Disp_Temp_alarm(uchar addr,uchar num)

{ //0=TH,1=TL

display1[2]=temp_alarm[num]/100+0x30;

display1[0]=temp_alarm[num]%100;

display1[1]=display1[0]/10+0x30;

display1[0]=display1[0]%10+0x30;

if(display1[2]==0x30) //高位为0,不显示

{

display1[2]=0x20;

if(display1[1]==0x30) //次高位为0,不显示

display1[1]=0x20;

}

lcd_pos(addr);

lcd_wdat(display1[2]); //百位数显示

lcd_wdat(display1[1]); //十位数显示

lcd_wdat(display1[0]); //个位数显示

}

/**********************************************************/ // Time0中断函数

/**********************************************************/ void Time0(void) interrupt 1 using 0

{

TH0=0x4c; //50ms定时

TL0=0x00;

timecount++;

if(timecount>9)

{

timecount=0;

flag=~flag;

}

}

/*********************************************************/ // 温度比较函数

/*********************************************************/ void temp_compare()

{

if(temp_comp >= temp_alarm[0]) //比较TH 值

{

compare_th=1;

}

else compare_th=0;

if(temp_comp < temp_alarm[1]) //比较TL 值

{

compare_tl=1;

}

else compare_tl=0;

if(compare_th)

{

spk(0x46); //小喇叭闪动

if(!alarm_on_off) //静音选择

beep();

count=temp_alarm[0];

}

else

{

lcd_pos(0x46);

lcd_wdat(0x20);

}

if(compare_tl)

{

spk(0x4e); //小喇叭闪动

if(!alarm_on_off) //静音选择

beep();

count=temp_alarm[1];

}

else

{

lcd_pos(0x4e);

lcd_wdat(0x20);

}

}

/*******************************************************************/ /* */ /* 主函数*/ /* */ /*******************************************************************/ void main()

{

uchar m;

TMOD=0x01; TH0=0x4c; TL0=0x00; //50ms定时

EA=1; ET0=1; TR0=1;

P0=0;

P2&=0x1F;

Init_DS18B20();

Write_Temperature_alarm(); //设定报警上下限温度值

if(presence)

{

Error_Menu ();

do

{

Init_DS18B20();

beep();

}

while(presence);

}

RomCode_Menu (); //显示RomCode for(m=0;m<10;m++)

Delay(50000);

Natural_Menu (); //正常显示界面

Delay(50000);

while(1)

{

Read_Temperature(); //读取当前温度

Delay(50000);

Disp_Temperature(); //更新当前温度

temp_compare(); //温度上下限比较

if(compare_th)

{

Set_tempalarm_Flash(0x43,0); //上限报警

}

if(compare_tl)

{

Set_tempalarm_Flash(0x4b,1); //下限报警

}

}//end of while(1)

} //end of main()

单片机课程设计(温度控制器)

基于单片机的温度控制器设计 内容摘要:该温度报警系统以AT89C51单片机为核心控制芯片,实现温度检测报警功能的方案。该系统能实时采集周围的温度信息,程序内部设定有报警上下限,根据应用环境不同可设定不同的报警上下限。该系统实现了对温度的自动监测和自动调温功能。 关键词:AT89C51ADC0808 温度检测报警自动调温 Abstract:The temperature alarm system AT89C51 control chip, realize temperature detection alarm function scheme. The system can collect real-time temperature information around that internal procedures set alarm equipped, according to different application environment can be set different alarm upper. The system realizes the automatic monitoring of temperature. The instrument can achieve the automatic thermostat function. Keywords:AT89C51 ADC0808Temperature detectingalarmautomatic thermostat 引言:本课题是基于单片机的温度控制器设计,经过对对相关书籍资料的查阅确定应用单片机为主控模块通过外围设备来实现对温度的控制。实现高低温报警、指示和低温自加热功能(加热功能未在仿真中体现)。 1.设计方案及原理 1.1设计任务 基于单片机设计温度检测报警,可以实时采集周围的温度信息进行显示,并且可以根据应用环境不同设定不同的报警上下限。 1.2设计要求 (1)实时温度检测。 (2)具有温度报警功能。 (3)可以设报警置温度上下限。 (4)低于下限时启动加热装置。 1.3总体设计方案及论证

单片机课程设计报告模板资料

哈尔滨远东理工学院 课题名称 专业班级 学号 学生姓名 指导教师 2015年10月14日

1、例举设计过程中遇到的问题及其解决方法(至少两例)。答:(1)问题说明: 解决方法: (2)问题说明: 解决方法: 2、教师现场提的问题记录在此(不少于2个问题)。

目录 1 设计任务 (1) 2设计方案 (2) 2.1任务分析 (2) 2.2方案设计 (2) 3 系统硬件设计 (3) 3.1时钟电路设计 (3) 3.2复位电路设计 (3) 3.3 灯控制电路设计 (3) 3.4 倒计时显示电路设计 (4) 3.5 按键控制电路设计 (5) 4 系统软件设计 (6) 4.1 1S定时 (6) 4.2 定时程序流程 (6) 4.3交通灯的设计流程图 (6) 4.4定时器0 及中断响应 (7) 5仿真与性能分析 (8) 6心得体会 (9) 参考文献 (10) 附录1 系统原理图 .......................................................................错误!未定义书签。附录2 系统PCB图 .....................................................................错误!未定义书签。附录3 程序清单 .. (11) II

1 设计任务 支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯。如图1.1所示。设东西向为主干道,南北为支干道。 1. 基本要求 (1) 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。 (2) 主、支干道均有车时,两者交替允许通行,主干道每次放行30秒,支干道每次放行20秒,设立30秒、20秒计时、显示电路。 (3) 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。黄灯亮时,原红灯按1Hz 的频率闪烁。 (4) 要求主支干道通行时间及黄灯亮的时间均可在0~99秒内任意设置。 2. 选做 (1) 可设置紧急按钮,在出现紧急情况时可由交警手动实现全路口车辆禁行而行人通行状态,即主干道和支干道均为红灯亮。 (2) 实现绿波带。所谓‘绿波带’,是指在一定路段,只要按照规定时速,就能一路绿灯畅行无阻。“绿波带”将根据道路车辆行驶的速度和路口间的距离,自动设置信号灯的点亮时间差,以保证车辆从遇到第一个绿灯开始,只要按照规定速度行驶,之后遇到的信号灯将全是绿灯。

LCD1602液晶显示实验实验报告及程序.doc

实验三 LCD1602 液晶显示实验 姓名专业学号成绩 一、实验目的 1.掌握 Keil C51 软件与 proteus 软件联合仿真调试的方法; 2.掌握 LCD1602液晶模块显示西文的原理及使用方法; 3.掌握用 8 位数据模式驱动 LCM1602液晶的 C 语言编程方法; 4.掌握用 LCM1602液晶模块显示数字的 C 语言编程方法。 二、实验仪器与设备 1.微机一台 C51 集成开发环境仿真软件三、 实验内容 1.用 Proteus 设计一 LCD1602液晶显示接口电路。要求利用 P0口接 LCD1602 液晶的数据端, ~做 LCD1602液晶的控制信号输入端。 ~口扩展 3 个功能 键 K1~K3。参考电路见后面。 2.编写程序,实现字符的静态和动态显示。显示字符为 第一行:“ 1. 姓名全拼”,第二行:“ 2. 专业全拼 +学号”。 3.编写程序,利用功能键实现字符的垂直滚动和水平滚动等效果显示。显 示字符为: “1. 姓名全拼 2.专业全拼+学号EXP8DISPLAY ” 主程序静态显示“ My information!” 四、实验原理

液晶显示的原理:采用的 LCD显示屏都是由不同部分组成的分层结构,位于最后面的一层是由荧光物质组成的可以发射光线的背光层,背光层发出的光线在穿过第一层偏振过滤层之后进入包含成千上万水晶液滴的液晶层,液晶层中的水晶液滴都被包含在细小的单元格结构中,一个或多个单元格构成屏幕上的一个像素。当 LCD中的电极产生电场时,液晶分子就会产生扭曲,从而将穿越其中的光线进行有规则的折射,然后经过第二层过滤层的过滤在屏幕上显示出来。 1.LCD1602采用标准的 14 引脚(无背光)或 16 引脚(带背光)接口,各 引脚接口说明如表: 编号符号引脚说明编号符号引脚说明 1VSS电源地9D2数据 2VDD电源正极10D3数据 3VL液晶显示偏压11D4数据 4RS数据/命令选择12D5数据 5R/W读/写选择13D6数据 6E使能信号14D7数据 7D0数据15BLA背光源正极 8D1数据16BLK背光源负极2. 1602 液晶模块内部的控制器共有11 条控制指令,如表所示:

单片机课程设计完整版样本

课程设计( 论文) 课程名称单片机 题目名称简易密码锁的设计学院高等技术学院 专业班级高1 1 0 9 学号3869 学生姓名刘欢 指导教师胡立强 11月28 日 目录

一,任务目的 (3) 二,任务要求 (3) 三,电路与元器件 (4) 四,程序设计 (5) 五,程序运行测试 (6) 六,任务小结 (7) 七,心得体会 (8) 八,参考文献 (9) 1.任务目的

经过对具有四个按键输入和一个数码管显示的简易密码锁的设计与制作, 让读者理解C语言中数组的基本概念和应用技术, 并初步了解单片机与键盘和LED数码管的接口电路设计及编程控制方法。 2.任务要求 在一些智能门控管理系统, 需要输入正确的密码才能开锁。基于单片机控制的密码锁硬件电路包括三部分: 按键、数码显示和电控开锁驱动电路, 三者的对应关系如图表3.16所示。 表3.16 简易密码锁状态 简易密码锁的基本功能如下: 4个按键, 分别代表数字0,1,2,3: 密码在程序中事先设定, 为0-3之间的一个数字; 上电复位后, 密码锁初始状态为关闭, 密码管显示符号”—”; 当按下数字键后, 若与事先设定的密码相同, 则数码管显示字符”P”, 打开锁, 3秒后恢复锁定状态, 等待下一次密码的输入, 否则显示字符”E”持续3秒, 保持锁定状态并等待下次输入。 3.电路与元器件 根据任务要求, 用一位LED数码管作为显示器件, 显示密码锁的状态信息, 数码管采用静态连接方式; 4个按键连接到P0口的低四位

P0.0-P0.3引脚, 设P0.0连接数字”0”按键、P0.1连接数字”1”按键, 依次类推; 锁的开、关电路用P3.0控制的一个发光二极管代替, 发光二极管点亮表示锁打开, 熄灭表示锁定。根据以上分析, 采用如图3.21所示的连接电路。 图3.21 简易密码锁电路 简易密码锁电路所需元器件清单如表3.17所示。 元器件名称参数数量元器件名 称 参数数量 插座DIP40 1 电阻103 1 单片机AT89SC51 1 电解电容22UF 1

51单片机交通灯课程设计

第一章单片机概述 单片机是20世纪70年代中期发展起来的一种大规模集成电路器件。它在一块芯片内芯片内集成了计算机的各种功能部件,构成一种单片式的微型计算机。20世纪80年代以来,国际上单片机的发展迅速,其产品之多令人目不暇接,单片机应用不断深入,新技术层出不穷。 单片机的应用技术是一项新型的工程技术,其内涵随着单片机的发展而发展。由于MCS-51系列的单片机的模块化结构比较典型、应用灵活,为许多大公司所采纳,使8051系列的单片产品日新月异。在Intel公司20世纪80年代初推出MCS-51系列单片机以后,世界上许多著名的半导体厂商相继生产和这个系列兼容的单片机,使产品型号不断地增加、品种不断丰富、功能不断加强,在国内外单片机应用中占有重要地位。由于单片机具有功能强、体积小、价格低等一系列优点,在各个领域都有广泛的应用,有力地推动了各行各业的技术改造和产品更新换代。 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,

产品更新换代的节奏也越来越快。 第二章MSC-51芯片简介 8051是MCS-51系列单片机的典型产品。 8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: ·中央处理器:

中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 ·数据存储器(RAM) 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM 只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。 ·程序存储器(ROM): 8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 ·定时/计数器(ROM): 8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。 ·并行输入输出(I/O)口: 8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。 ·全双工串行口: 8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。

智能小车单片机课程设计报告

题目: 智能小车设计 打开命令行终端的快捷方式: ctr+al+t:默认的路径在家目录 ctr+shift+n:默认的路径为上一次终端所处在的路径. linux@ubuntu:~$ linux:当前登录用户名. ubuntu:主机名 :和$之间:当前用户所处在的工作路径. windows下的工作路径如C:\Intel\Logs linux下的工作路径是:/.../..../ ~:代表的是/home/linux这个路径.(家目录). ls(list):列出当前路径下的文件名和目录名. ls -a(all):列出当前路径下的所有文件和目录名,包括了隐藏文件. .:当前路径 ..:上一级路径 ls -l:以横排的方式列出文件的详细信息 total 269464(当前这个路径总计所占空间的大小,单位是K) drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop 第一个位置:代表的是文件的类型. linux系统下的文件类型有以下几种. b:块设备文件 c:字符设备文件 d:directory,目录 -:普通文件. l:连接文件. s:套接字文件. p:管道文件. rwxr-xr-x:权限 r:读权限-:没有相对应的权限 w:写权限

x:可执行权限 修改权限: chmod u-或者+r/w/x 文件名 chmod g-或者+r/w/x 文件名 chmod o-或者+r/w/x 文件名 第一组:用户权限 第二组:用户组的权限 第三组:其他用户的权限. chmod 三个数(权限) 文件名 首先根据你想要的权限生成二进制数,再根据二进制数转换成十进制的三位数 rwxr-x-wx 111101011 7 5 3 chmod 753 文件名 rwx--xr-x 第二个位置上的数字:对应目录下的子文件个数,如果是非目录,则数字是1 第三个位置:用户名(文件创造者). 第四个位置:用户组的名字(前边的用户所处在的用户组的名字). 第五个位置:对应文件所占的空间大小(单位为b) 第六~八个位置:Dec 4 19:16时间戳(最后一次修改文件的时间) 最后一个位置:文件名 操作文件: 1.创建一个普通文件:touch 文件名 2.删除一个文件:rm(remove) 文件名 3.新建一个目录:mkdir(make directory) 目录名 递归创建目录:mkdir -p 目录1/目录2/目录3 4.删除一个目录:rmdir 目录名.//仅删除一个空目录 rm -rf 目录名//删除一个非空目录 5.切换目录(change directory):cd 路径 linux下的路径分两种 相对路径:以.(当前路径)为起点. 绝对路径:以/(根目录)为起点, 用相对路径的方式进入Music:cd ./Music 用绝对路径的方式进入Desktop:cd /home/linux/Desktop 返回上一级:cd ..

LED灯实验报告

mcs-51单片机接口技术实验 适用:电气类专业本科学生 实验报告 实验一熟悉proteus仿真模拟器,led花样表演 一、实验目的 掌握以下方法: 1.在proteus的环境下,设计硬件原理图; 2.在keilc集成环境下设计c51语言程序; 2.在proteus的环境下,将硬件原理图与软件联接仿真运行。 二、实验环境 1.个人微机,windows操作系统 2.proteus仿真模拟器 3.keilc编程 三、实验题目 基本题:使用8051的并口带动8个led发光二极管显示一种花样表演。提高题:使用一个键切换实现3种以上花样表演。 四、实验类型: 学习、模仿与简单设计型。 五、实验步骤: 0、进入isis,先选择需要的元件,然后设计电原理图,保存文件; 1、在keilc软件集成环境下编写源程序,编译工程文件; 2、将所设计的硬件原理图与目标代码程序相联接; 4、按play键,仿真运行程序。 附,可能用到的元件名称: cpu:at89c51或任一种mcs-51家族cpu; 晶振:crystal; 电容器:capacitors,选22pf 电解电容:cap-elec或genelect10u16v 复位电阻:minres10k 限流电阻:minres330r 按键:button led:led-blue/red/yellow或diode-led (一)接线图如下: (二).基础花样 (四)程序流程图 (五)c程序 #include <> #define uint unsigned int #define uchar unsigned char const tab1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, /*正向流水灯*/ 0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,};/*反向流水灯*/ const tab2[]={0xff,0x00,0xff,0x00,0xff,0x00,}; void delay() { uint i,j; for(i=0;i<256;i++) for(j=0;j<256;j++)

单片机课程设计报告电子密码锁完整版

单片机课程设计报告电 子密码锁 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

山东交通学院 单片机原理与应用课程设计院(部):轨道交通学院 班级:自动化121 学生姓名: 学号: 指导教师: 时间:— 课程设计任务书 题目电子密码锁设计 系 (部) 轨道交通学院 专业班级自动化121 学生姓名 学号 06 月 01 日至 06 月 12 日共 2 周 指导教师(签字) 系主任(签字) 年月日

目录 3.总体设计 (2)

4 密码比较模块 (6) (6) (8) (9) 附录 (10)

摘要 设计运用了ATMEL公司的AT89S52芯片系统,将微处理器、总线、蜂鸣器、矩阵键盘、存储器和I/O口等硬件集中一块电路板上,通过读取键盘输入的数据(密码)并储存到ATMEL912 24C08存储器中,然后判断之后键盘输入的数据与已存储的数据是否相同来决定打开密码箱或锁键盘或报警。在keil4软件中编程,系统可实现6位密码的处理,并通过控制步进电机控制密码箱门的电子锁,同时还可以修改改密码。利用单片机系统制作的密码箱安全性能更高,更易操作且体积小。 关键词:单片机、密码锁、修改密码 1.设计要求 本实验将实现六位数的电子密码锁。要求使用4X4 行列式键盘作为输入,并用LCD 实时显示。具体要求如下:1. 开机时LCD显示“welcome to use”,初始化密码为“123456”,密码可以更改。 2. 按下“10”,开始则显示“Enter Please:”。3. 随时可以输入数值,并在LCD上实时显示‘*’。当键入数值时,为了保密按从左到右依次显示‘*’,可键入值为0~9。 4. 按下“13”键,则表示确定键按下,进行密码对比。如相符则在LCD第一行显示“Open the door!”,同时指示灯亮起并且步进电机旋转一定的角度;如不符,则LCD第一行显示“Wrong password!”,并且蜂鸣器同时提示一下。如果密码连续三次错误则蜂鸣器连续响5下,并且持续5秒不能进行任何操作 5.在开锁状态下按下“12”键,进入修改密码状态,LCD同时提示“Enter new code!”。为删除按键,出入之后可以进行删除。按键为关闭按键,只有在打开状态下才可以关闭,按下之后LCD显示“Close the door!”。 2.功能概述 此设计分为四个功能模块。 第一模块:按键输入模块,用于密码的输入以及其他的密码操作按键。 第二模块:LCD模块,是与使用者交流的界面,用于显示各种状态下的内容。 第三模块:步进电机模块,用于控制密码锁的打开与关闭。 第四模块:24C08模块,用于储存输入的密码并读出来。 3.总体设计 本次设计作品的主要构成部分包括80C51单片机、LCD1602、24C08、矩阵按键、LED 等、蜂鸣器。如图1总体仿真图,图2实物图。 图1 总体电路图 图2 密码锁实物图 4.硬件设计 矩阵按键设计 如图3所示矩阵按键由P1口控制,了加强密码的保密性,采用一个4×4的矩阵式键盘可以任意设置用户密码(1-16位长度),从而提高了密码的保密性,同时也能减少与单片机接口时所占用的I/O口线的数目,节省了单片机的宝贵资源,在按键比较多的时候,通常采用这种方法。 每一行与每一列的交叉处不相同,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N根行线与M根列线,即可组成具有N × M 个按键的矩阵键盘。 在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确

单片机课程设计报告

《单片机原理及接口技术》课程设计题目:简易计算器设计 级:电子1547 名:苏丹丹、李静、齐倩 号:05号、17号、11号

导教师:张老师 间:2013年12月 西安航空学院电气学院

目录 一、选题的背景和意义-------------------1 1.1选题的背景-------------------------------------1 1.2选题的意义-------------------------------------1 二、总体设计-------------------------------1 2.1设计任务---------------------------------------1 2.2方案选择---------------------------------------1 三、硬件设计-------------------------------2 3.1 元器件名称--------------------------------------------------------2 3.2 计算器按键介绍--------------------------------------------------2 3.3硬件系统框图、单元电路--------------------------3 四、软件设计-------------------------------3 4.1 软件调试步骤-----------------------------------------------------3 4.2软件设计流程图---------------------------------------------------4 五、结束语------------------------------------5 六、参考文献--------------------------------5 七、附录---------------------------------------6

单片机课程设计报告

课程设计报告 课程名称单片机原理及应用 设计题目电子琴的设计 专业班级自动化1142 姓名周太永 学号1104421242 指导教师蔡长青张卓 起止时间2014.6.23-2014.7.11 成绩评定 考核内容设计 表现 设计 报告 答辩 综合 评定 成绩 电气与信息学院

2013/2014学年第二学期 《单片机控制系统设计与调试》课程设计任务书 指导教师:蔡长青班级:自动化1141、2班 地点:机房、单片机实验室(实训中心415) 课程设计题目:基于单片机原理的电子琴设计 一、课程设计目的 1.灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计, 到PCB制版,再到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,将各门知识综合应用。 2.能够上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。 3.独立完成一个小的系统设计,从硬件设计到软件设计,增强分析问题、解决问 题的能力,为日后的毕业设计及科研工作奠定良好的基础。 二、课程设计内容(包括技术指标) 1.焊接。认真、仔细,避免缺焊、漏焊。 2.频率计算。会计算脉冲值与频率的关系。 3.工作过程。开机时,第一步是对定时器T0进行初始化,设定它的工作状态(对 于本系统将T0设定为工作方式0);然后判断是否有键按下,如果没有按键按下,继续判断,如果有按键按下,则判断是哪个键按下;再根据按键的功能将计数初值装入定时器T0中中并启动T0,当T0定时完毕后,重新装入计数初值继续定时并将P3.3取反,再次定时完毕后再一次的装入计数初值 继续定时并将P3.3取反,一直循环此操作直到按键释放为止,按键释放后 停止T0工作并再次判断是否又有按键按下,并继续执行以前的过程。 三、时间安排 1.布置任务、查资料1天 2.硬件电路图设计及PCB制版3天 3.硬件电路图及PCB制版验收、电路板焊接1天 4.软件编程设计3天 5.系统调试3天 6.调试验收1天 7.完成设计报告3天 四、基本要求 1.画出硬件电路图,完成PCB制版; 2.画出软件流程图,编写程序(C51语言/汇编语言); 3.完成系统调试; 4.提交设计报告。

单片机课程设计完整版《PWM直流电动机调速控制系统》

单片机原理及应用课程设计报告设计题目: 学院: 专业: 班级: 学号: 学生姓名: 指导教师: 年月日 目录

设计题目:PWM直流电机调速系统 本文设计的PWM直流电机调速系统,主要由51单片机、电源、H桥驱动电路、LED 液晶显示器、霍尔测速电路以及独立按键组成的电子产品。电源采用78系列芯片实现+5V、+15V对电机的调速采用PWM波方式,PWM是脉冲宽度调制,通过51单片机改变占空比实现。通过独立按键实现对电机的启停、调速、转向的人工控制,LED实现对测量数据(速度)的显示。电机转速利用霍尔传感器检测输出方波,通过51单片机对1秒内的方波脉冲个数进行计数,计算出电机的速度,实现了直流电机的反馈控制。 关键词:直流电机调速;定时中断;电动机;波形;LED显示器;51单片机 1 设计要求及主要技术指标: 基于MCS-51系列单片机AT89C52,设计一个单片机控制的直流电动机PWM调速控制装置。 设计要求 (1)在系统中扩展直流电动机控制驱动电路L298,驱动直流测速电动机。 (2)使用定时器产生可控的PWM波,通过按键改变PWM占空比,控制直流电动机的转速。 (3)设计一个4个按键的键盘。 K1:“启动/停止”。 K2:“正转/反转”。 K3:“加速”。 K4:“减速”。 (4)手动控制。在键盘上设置两个按键----直流电动机加速和直流电动机减速键。在

手动状态下,每按一次键,电动机的转速按照约定的速率改变。 (5)*测量并在LED显示器上显示电动机转速(rpm). (6)实现数字PID调速功能。 主要技术指标 (1)参考L298说明书,在系统中扩展直流电动机控制驱动电路。 (2)使用定时器产生可控PWM波,定时时间建议为250us。 (3)编写键盘控制程序,实现转向控制,并通过调整PWM波占空比,实现调速; (4)参考Protuse仿真效果图:图(1) 图(1) 2 设计过程 本文设计的直流PWM调速系统采用的是调压调速。系统主电路采用大功率GTR为开关器件、H桥单极式电路为功率放大电路的结构。PWM调制部分是在单片机开发平台之上,运用汇编语言编程控制。由定时器来产生宽度可调的矩形波。通过调节波形的宽度来控制H电路中的GTR通断时间,以达到调节电机速度的目的。增加了系统的灵活性和精确性,使整个PWM脉冲的产生过程得到了大大的简化。 本设计以控制驱动电路L298为核心,L298是SGS公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。可驱动2个电机,OUTl、OUT2和OUT3、OUT4之间分别接2个电动机。5、7、10、12脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。 本设计以AT89C52单片机为核心,如下图(2),AT89C52是一个低电压,高性能 8位,片内含8k bytes的可反复擦写的只读程序存储器和256 bytes的随机存取数据存储器(),器件采用的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。 图(2) 对直流电机转速的控制即可采用开环控制,也可采用闭环控制。与开环控制相比,速度控制闭环系统的机械特性有以下优越性:闭环系统的机械特性与开环系统机械特性相比,其性能大大提高;理想空载转速相同时,闭环系统的静差(额定负载时电机转速降落与理想空载转速之比)要小得多;当要求的静差率相同时, 闭环调速系统的调速范

51单片机课程设计秒表

微控制器技术课程 设计报告 设计题目:秒表 专业:供用电技术 班级:供电141 学号:140315143 姓名:王晨铭 指导教师:李昊 设计时间:2016.6.21

微控制器技术课程设计任务书 设计题目:秒表 设计时间:2016.6.20 设计任务: 在单片机开发板或软件仿真,编制程序,实现以下功能 1、利用定时器实现秒表功能,精确到0.1S; 2、数码管显示当前计时时间; 3、设定三个键,计时开始,停止计时和复位清零。 背景资料:1、单片机原理与应用 2、检测技术 3、计算机原理与接口技术 进度安排: 1、第1天,领取题目,熟悉设计内容,分解设计步骤和任务; 2、第3天,规划设计软硬件,编制程序流程、绘制硬件电路。 3、第5天,动手制作硬件电路,或编写软件,并调试。 4、第7天,中期检查。 5、第9天,完善设计内容,书写设计报告。 6、第13天,提交设计报告,整理设计实物,等待答辩。 7、第14天,设计答辩。

目录 一、设计任务和要求 (3) (1)设计任务 (3) (2)设计要求 (3) 二、设计方案与论证 (3) 三、单元电路设计与参数计算 (4) (1)时钟电路 (4) (2)按钮电路 (4) (3)显示电路 (5) (4)单片机 (5) 四、原理图及器件清单 (6) ( 1 )总原理图 (6) (2)PCB图 (7) (3)Proteus仿真图 (7) (4)元器件清单 (8) 五、安装与调试 (8) (1)安装 (8) (2)调试 (8) 六、性能测试和分析 (9) 七、结论和心得 (9) 八、参考文献 (9)

题目:秒表 二、方案设计与论证 本设计分为时钟电路、按钮电路、显示电路和单片机四大部分,这些模块中单片机占主控地位。其模块电路如图2-1所示。时钟电路常用的有内部时钟方式和外部时钟方式,但因为本设计中只需要一片单片机,所以采用内部时钟方式比较简单。按钮电路中的“复位”按钮是按键手动复位,它有电平和脉冲两种方式,比较电路的复杂程度,本设计选择了按钮电平复位电路,其他几个按钮则是通过单片机判断高低电平的不同来控制按钮。显示电路所用的数码管有共阴和共阳之分,不管使用何种数码管,P0口作为I/O使用时都是需要上拉电阻才能驱动数码管。另外,因为单片机的4个并行I/O口的输出电流一般是1mA,短路电流为4mA左右,而数码管的最少驱动电流也需要10mA,因而不管在使用共阴数码管时,单片机输出口也必须使用上拉电阻提高输出电流,才能驱动数码管。为了使电路简单化,本设计选用共阳数码管。但根据显示方式的不同选择,我们可以有几种方案: 方案一:使用静态显示方式。静态显示方式下的数码管的显示字符一经确定,相应锁存器锁存的断码输出將维持不变,直到送入另一个字符的断码为止。因而此设计中使用的显示位数使用了三个8位并行I/0口。如果另外想扩展单片机功能,则能使用的输出管脚很是有限。 方案二:使用动态显示方式。这个显示方式是将所有显示位的段码线的相应段并联在一起,由一个8位I/O口控制,而各位的共阴或共阴极分别由相应的I/O线控制,形成各位的分时选通。这种显示方式,简化了硬件电路,特别在多位数码管显示时尤为突出。 本小组尝试了各种方案,在此报告中以静态显示方式为例说明。(动态显示方式省略) 显示电路 单片机 AT89C51 时钟电路 按钮电路

单片机课程设计报告模板

单片机系统课程设计报告 专业:自动化 学生姓名: 学号: 指导教师: 完成日期:2011 年 3 月17 日

目录 1 设计任务和性能指标 (3) 1.1设计任务............................................................................ 错误!未定义书签。 2 设计方案 (4) 2.1任务分析 (4) 2.2方案设计 (4) 3 系统硬件设计 (5) 3.1时钟的电路设计 (5) 3.2复位电路设计 (5) 3.3灯控电路设计 (5) 3.4倒计时电路设计 (6) 3.5按键控制电路设计 (7) 4 系统软件设计 (8) 4.11秒定时 (8) 4.2定时程序流程 (8) 4.3交通灯的设计流程图 (9) 4.4定时器0与中断响应 (10) 5 仿真及性能分析 (10) 5.1仿真结果图 (11) 5.2仿真结果与分析 (12) 6 心得体会 (13) 参考文献 (14) 附录1 系统原理图 (15) 附录2 系统PCB图 .................................................................. 错误!未定义书签。附录3 程序清单 (17)

1.1设计任务 利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯。如图5.1所示。设东西向为主干道,南北为支干道。 图5.1 交通灯示意图 1. 基本要求 (1) 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干 道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。 (2) 主、支干道均有车时,两者交替允许通行,主干道每次放行30秒, 支干道每次放行20秒,设立30秒、20秒计时、显示电路。 (3) 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。 黄灯亮时,原红灯按1Hz 的频率闪烁。 (4) 要求主支干道通行时间及黄灯亮的时间均可在0~99秒内任意设置。 2. 选做 (1) 可设置紧急按钮,在出现紧急情况时可由交警手动实现全路口车辆 禁行而行人通行状态,即主干道和支干道均为红灯亮。 (2) 实现绿波带。所谓‘绿波带’,是指在一定路段,只要按照规定时速, 就能一路绿灯畅行无阻。“绿波带”将根据道路车辆行驶的速度和路口间的距离,自动设置信号灯的点亮时间差,以保证车辆从遇到第一个绿灯开始,只要按照规定速度行驶,之后遇到的信号灯将全是绿灯。 南 北 东 西

液晶的电光特性实验报告含思考题

西安交通大学实验报告 第1页(共9页)课程:_______近代物理实验_______ 实验日期:年月日 专业班号______组别_______交报告日期:年月日 姓名__Bigger__学号__报告退发:(订正、重做) 同组者__________教师审批签字: 实验名称:液晶的电光特性 一、 二、实验目的 1) 2)了解液晶的特性和基本工作原理; 3) 4)掌握一些特性的常用测试方法; 5) 6)了解液晶的应用和局限。 三、 四、实验仪器 激光器,偏振片,液晶屏,光电转换器,光具座等。 五、 六、实验原理 液晶分子的形状如同火柴一样,为棍状,长度在十几埃,直径为4~6埃,液晶层厚度一般为 5-8微米。排列方式和天然胆甾相液晶的主要区别是:扭曲向列的扭曲角是人为可控的,且“螺距” 与两个基片的间距和扭曲角有关。而天然胆甾相液晶的螺距一般不足1um,不能人为控制。扭曲向

列排列的液晶对入射光会有一个重要的作用,他会使入射的线偏振光的偏振方向顺着分子的扭曲方向旋转,类似于物质的旋光效应。在一般条件下旋转的角度(扭曲角)等于两基片之间的取向夹角。 对于介电各向异性的液晶当垂直于螺旋轴的方向对胆甾相液晶施加一电场时,会发现随着电场的增大,螺距也同时增大,当电场达到某一阈值时,螺距趋于无穷大,胆甾相在电场的作用下转变成了向列相。这也称为退螺旋效应。由于液晶分子的结构特性,其极化率和电导率等都具有各向异性的特点,当大量液晶分子有规律的排列时,其总体的电学和光学特性,如介电常数、折射率也将呈现出各向异性的特点。如果我们对液晶物质施加电场,就可能改变分子排列的规律。从而使液晶材料的光学特性发生改变,1963年有人发现了这种现象。这就是液晶的的电光效应。 为了对液晶施加电场,我们在两个玻璃基片的内侧镀了一层透明电极。将这个由基片电极、取向膜、液晶和密封结构组成的结构叫做液晶盒。根据液晶分子的结构特点,假定液晶分子没有固定的电极,但可被外电场极化形成一种感生电极矩。这个感生电极矩也会有一个自己的方向,当这个方向以外电场的方向不同时,外电场就会使液晶分子发生转动,直到各种互相作用力达到平衡。液晶分子在外电场作用下的变化,也将引起液晶合中液晶分子的总体排列规律发生变化。当外电场足够强时,两电极之间的液晶分子将会变成如图1中的排列形式。这时,液晶分子对偏振光的旋光作用将会减弱或消失。通过检偏器,我们可以清晰地观察到偏振态的变化。大多数液晶器件都是这样工作的。 图1液晶分子的扭曲排列变化 若将液晶盒放在两片平行偏振片之间,其偏振方向与上表面液晶分子取向相同。不加电压时,入射光通过起偏器形成的线偏振光,经过液晶盒后偏振方向随液晶分子轴旋转90°,不能通过检偏器;施加电压后,透过检偏器的光强与施加在液晶盒上电压大小的关系见图2;其中纵坐标为透光强度,横坐标为外加电压。最大透光强度的10%所对应的外加电压值称为阈值电压(U th),标志了液晶电光效应有可观察反应的开始(或称起辉),阈值电压小,是电光效应好的一个重要指标。最大透光强度的90%对应的外加电压值称为饱和电压(U r),标志了获得最大对比度所需的外加电压数值,U 小则易获得良好的显示效果,且降低显示功耗,对显示寿命有利。对比度D r=I max/I min,其中I max r 为最大观察(接收)亮度(照度),I min为最小亮度。陡度β=U r/U th即饱和电压与阈值电压之比。 图2液晶电光效应关系图

单片机课程设计——基于C51简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C 语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减乘除

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

相关主题
文本预览
相关文档 最新文档