单片机课程设计

发布 2022-10-04 22:33:28 阅读 7238

一、本设计任务及完成的功能。

1、本设计任务:实现最长99s的倒计时功能;利用数码管或液晶屏显示数字;利用按键可以设置倒计时时间;设置倒计时开始启动键;时间到,声(光)报警,示意倒计时时间到。

2、完成的功能:实现了0~99s之间任意整数秒的倒计时,通过矩阵按键中0~9数字键设置倒计时间,按下*或#键开始倒计时,当倒计时间结束时,led灯亮,停止倒计时。

二、倒计时器硬件设计。

1、元器件。

at89c51单片机1个、两位动态共阴数码管1个、9个引脚的排阻、1k电阻3个、12mhz晶振1个、33pf电容2个、10uf极性电容1个、独立按键1个、4行3列矩阵按键1个、led指示灯1个、电源和地若干。

2、系统的硬件构成及功能。

最长99秒计时器的原理框图如图1所示。

图1 99秒计时器系统原理框图。

系统硬件连线:

1)p1口接矩阵按键

2)p2口接动态数码管的8个段选

3)p0^6、p0^7分别接动态数码管的十位和个位

4)p3^7接led指示灯

5)xtal1和xtal2接晶振

6)rst接复位电路

三、系统的软件设计。

本系统的软件系统主要可分为主程序设计和定时中断程序。

系统主程序设计。

主程序包括主函数、矩阵按键扫描函数、对矩阵按键扫描进行相应处理函数、动态数码管显示函数等。

1、矩阵按键扫描函数ankey()

矩阵按键的原理和方法:矩阵按键的两端都与单片机的i/o口相连,在检测时,人为的通过单片机i/o口送出低电平。检测时,先送一列为低电平,其余几列全为高电平(这时就确定了列数),然后立即轮流检测一次个行是否有低电平,若检测到某一行为低电平(这时就确定了行数),则可以确定单前被按下的键是哪行哪列。

同样,用这种方**流检测各行各列,这样就可以检测所有按键,当有键按下时,就可判断是哪个键被按下。当然,也可以将行线置为低电平,扫描列是否有低电平。

本设计用的是4行3列矩阵按键,它接at89c51单片机的p1口,接法如图所示:

当按下0~9数字键时,会产生相应数值赋给矩阵按键扫描函数中以定义的参数key,当按下#或*键时,会分别产生11或10赋给key。这时调用对矩阵按键扫描进行相应处理函数text(uchar )且key赋给它,text(uchar )函数对key值进行相应处理:如果只按下一次数字键,那这数字就会是倒计时的个位,如果按下两次数字键,那第一次的数字就会是倒计时的十位,第二次数字的数字就会是倒计时的个位,当按下#或*键时,开始倒计时。

2、动态数码管显示函数。

动态数码管显示就是轮流向各位数码管送出段选及相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人眼感觉各位数码管同时都在显示,实际上多位数码管是一位一位轮流显示的,只是轮流比较快,我们分辨不出来。本设计用的是两位动态共阴数码管显示,它和单片机的连接如图所示:

其中那排阻是驱动电路。

3、复位电路如图:

rst为复位信号输入端,高电平有效。系统上电后,当已经进行过倒计时,这时想进行不同时间的倒计时,只要按下复位按钮后,就可以进行新的倒计时。

中断函数设计。

先初始化中断函数:

tmod=0x01;设置定时器0为工作方式1(0000 0001)

th0=(65536-50000)/256;//装初值50ms一次中断。

tl0=(65536-50000)%256;

ea=1; /开总中断。

et0=1; /开定时器0中断

tr0=0; /先别启动中断,留着用按键启动,以便开始倒计时。

中断函数如下:

void t0_time() interrupt 1 //定时器0中断函数。

th0=(65536-50000)/256;//重装初值。

tl0=(65536-50000)%256;

numt0++;50ms中断一次

四、总体程序如下:

#include <>

#define uchar unsigned char

#define uint unsigned int

sbit sw=p0^6; /十位位选。

sbit gw=p0^7; /个位位选。

sbit led=p3^7;//led灯。

uchar code table=编码定义。

uchar numt0,num;

void delayms(uint);

void text(uchar);

void display(uchar numdis) /动态数码管显示子函数。

uchar shi,ge分离两个分别要显示的数。

shi=numdis/10;

ge=numdis%10;

sw=0;p2=table[shi]; 送十位段选数据。

delayms(5); 延时。

sw=1;gw=0;

p2=table[ge]; 送个位段选数据。

delayms(5);

gw=1;void delayms(uint x)//延时x ms

uint i,j;

for(i=x;i>0;i--)i=x即延时约x毫秒。

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

void ankey() 键盘扫描。

uchar temp,key;

p1=0xef;//第1行。

temp=p1;

temp=temp&0x0f;//temp高4位清0;

if(temp!=0x0f) /判断是否有键按下。

text(key);

while(temp!=0x0f)//判断按键是否释放。

p1=0xdf;//第2行。

temp=p1;

temp=temp&0x0f;

if(temp!=0x0f)

text(key);

while(temp!=0x0f)

p1=0xbf;//第3行。

temp=p1;

temp=temp&0x0f;

if(temp!=0x0f)

text(key);

while(temp!=0x0f)

p1=0x7f;//第4行。

temp=p1;

temp=temp&0x0f;

if(temp!=0x0f)

text(key);

while(temp!=0x0f)

void text(uchar key)//判断键盘扫描结果,并倒计时。

static uchar n,bb,s;//静态局部变量。

s=1;if(key==0||key==1||key==2||key==3||key==4||key==5||key==6||key==7||key==8||key==9)

n++;有数字键被按下,n加1

if(key==10||key==11)

n=3;//和#被按下,n置3

switch(n)

单片机课程设计

可变程序控制器是集微机技术 自动化技术 通讯技术于一体的通用工业控制装置。它可靠性强 性能 比高 使用方便,已在工业控制的各个领域里得到了极为广泛的应用,成为实现工业自动化的一种强有力的工具 1 plc的定义有许多种。国际电工委员会 iec 对plc的定义是 可编程控制器是一种数字运算操作的电子系统...

单片机课程设计

目录。内容提要2 关键词2引言3 一 硬件电路设计3 一 电路板原理3 二 电路元器件3 二 软件设计3 一 秒钟设计方案3 二 时钟设计方案4 结语7单片机时钟设计。内容摘要 一 在实验板上用动态扫描显示00 59秒钟,具体要求如下 一 6m晶振 二 l9 l10显示00 59十进制数并循环,间隔...

单片机课程设计

1 选题背景。1.1 家庭智能防盗报警系统设计的背景及目的。随着经济的发展,人们对防盗 防劫 防火保安设备的需求量大大增加。针对偷盗 抢劫 火灾 煤气泄漏等事故进行检测和报警的系统,其需求也越来越高。家居智能是以家为平台,兼备建筑 自动化,智能化于一体的高效 舒适 安全 便利的家居环境。自动化的家居...