河南机电高等专科学校。
c51程序设计》大作业。
设计题目:运用kell c51软件编译时钟程序。
班级。学号。
姓名。成绩。
2010 年11月。
设计任务:运用kell c51软件编译时钟程序。
1、准备:1)装有kell c51编译软件的pc机。
2)单片机实验板(作为本次**验证的平台)
系统硬件电路原理图。
实验板实图:
2、实时时钟的编程设计。
1)要求:通过51单片机控制时钟芯片ds1302实现年、月、日、星期、时、分、秒在6位8段数码管上的切换显示并要求可调节。
2)原理:时钟一般有走时,显示和调整时间3项基本功能组成,这些功能在单片机时钟里主要有软件设计来体现出来,其中,走时部分利用单片机的定时/计数器产生中断。例如,在设置定时器t0工作在模式0状态下,设置每隔5ms中断一次,中断200次正好是一秒,60秒为一分,60分为一小时,24小时为一天,7天为一周,1月,3月,5月,7月,8月,10月,12月,各有三十一天,2月,4月,6月,9月,11月,为三十天,十二个月为一年。
本次设计采用at89s51作为主控芯片ds1302作为辅助芯片,外围电路简单,因为系统没有其它复杂的处理任务,所以决定采用动态扫描法实现led的显示。时钟的显示是使用6位数码管显示,由中断产生的秒,分,小时数据,经转换子程序转换转换成适应的led数码管显示的数据,并通过单片机的输出功能输入到数码管显示器,再通过显示器扫描程序,显示出时钟的走时时间。
调整时钟时间是利用了单片机的输入功能,把按键开关作为单片机的输入信号,通过检测被按下的开关,从而执行赋予该开关调整时间功能。
因此,在设计程序时把单片机时钟功能分解为走时,显示和调整时间三个主要部分,每一部分的功能通过编写相应的子程序来完成,然后通过主程序调用子程序,是这三部分有机的联系在一起,完成单片机的时钟设计。
实验流程图:
3)用keil编译程序,主程序开始后循环调用显示子程序显示时间,当“youyi”按键按下时切换显示星期和特殊字符“good” 并且c=2此时按中断键可以调星期;主程序流程图如下:
zuoyi==0 youyi==0
延时2ms延时2ms
主程序流程图。
编译界面如图:
ds1302通过rst、sclk和i/o引脚和外部控制器进行通信。在程序中,需要首先声明接口引脚,示例如下:
sbit clk=p3^5;//1302时钟信号线。
sbit io=p3^6;//1302的i/o数据线。
sbit rst=p3^7;//1302的rst复位线。
由于实验板上数码管为共阳型连脚,得出0~9的编码如下:
uchar code tab2[10]=;
程序中一些函数:
main();主函数。
int_timer():定时器设置函数。
t0_srv(void)interrupt 1;中断服务函数。
conv():转换时,分,秒及走时单元函数。
disp():扫描显示函数。
set_time():设置走时时间函数。
time():走时时间程序函数。
scan_key():扫描按键函数。
delay(uint k):延时函数。
3、将编译好的程序写入单片机,在实验板上验证,调试:
实验板验证。
总结。通过此次课程设计,我对以前在课堂上没有听懂的知识有了进一步的了解,首先我对51单片机的原理及应用更加熟悉了;其次是对编译程序的c语言应用的学习,这让原本对汇编语言一头雾水的我对单片机编程有了新的认识,应用c语言编程,相对容易了许多,毕竟大一时学过c语言,现在也用上了;最后亲身体验了单片机应用开发的全过程,特别在具体的设计过程中我发现理论与实际的应用存在着不小的差距,使我更深刻的体会到了理论联系实际的重要性,在今后的学习工作中要多从实际出发,多动手操作,以弥补实践经验少的不足。对专业前景也有了一定了解,为以后就业积累经验。
源程序。#include<>
#define uint unsigned int
#define uchar unsigned char
sbit acc0=acc^0;
sbit acc7=acc^7;
sbit jiak=p2^3;
sbit youyik=p2^2;
sbit zuoyik=p2^1;
sbit jiank=p2^0;
sbit int1k=p3^3;
sbit fmq=p1^1;
sbit clk=p3^5;//1302时钟信号线。
sbit io=p3^6;//1302的i/o数据线。
sbit rst=p3^7;//1302的rst复位线。
void inputbyte(uchar);/输入1byte
uchar outputbyte(uchar);/输出1byte
void w1302(uchar,uchar);
uchar r1302(uchar);
uchar tab[12];
void display();
void init();
uchar a,c,i,b;//c表示中断次数a表示数码管移位次数。
uint temp;
uchar miao,fen,shi,ri,yue,zhou;
uchar tab1[7]=;
uchar code tab2[10]=;
sbit zy=p2^1;
sbit yy=p2^2;
bit flagg;
bit flag;
uchar zz,time;
uchar code tabp0=
uchar code tabp2=
uchar time,time1;
void delay(uint z)
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--)
/往1302写入1byte d为写入的数据入口参数。
void inputbyte(uchar date)
uchar i;
acc=date;
for(i=8;i>0;i--)
/从1302读取1byte数据返回值acc
uchar outputbyte(void)
uchar i;
for(i=8;i>0;i--)
return(acc);
/往1302写入数据先写地址后写数据 ucadd ucda是入口参数。
void w1302(uchar addr,uchar date)
rst=0;
clk=0;
rst=1;
inputbyte(addr);/写地址。
inputbyte(date);/写1byte数据。
clk=1;
rst=0;
/读取1302某地址的数据先写地址后读数据 ucaddr入口地址 ucda是返回值。
uchar r1302(uchar addr)
uchar date;
rst=0;
clk=0;
rst=1;
inputbyte(addr);/写地址。
date=outputbyte();读1byte数据。
clk=1;
rst=0;
return(date);
/初始化设置初始值。
void init()
uchar i1;
uchar addr=0x80;
w1302(0x8e,0x00);/控制命令字节wp=0 写操作。
for(i1=0;i1<7;i1++)
w1302(0x90,0xa6);
w1302(0x8e,0x80);/控制命令字节wp=1写保?
C51课程设计课题
1简易数字存储示波器的设计。要求设计的简易数字存储示波器达到如下功能和技术指标 1 具有连续触发和单次触发两种存储显示方式。在连续触发存储显示方式中,仪器能连续对信号进行采集 存储并实时显示,且具有锁存 按 锁存 键即。可存储当前波形 功能。在单次触发存储显示方式下,每按动一次 单次触发 键,仪器在...
2019课程设计 程老师
civil iation university of china 航空发动机强度与振动。课程设计报告。姓名。学号。班级。专业。指导教师。2014年11月。题目及要求。题目基于ansys的叶片 轮盘强度与振动分析。1 模型。图1 叶片 轮盘模型如右图所示,相关参数如下 等厚度轮盘,厚度为0.025m,...
2019课程设计
面向对象 课程设计2011 1 要求 1 分小组完成课程设计,每小组2人,每个小组一个小组长。2 每个小组独立完成课程设计。3 采纳面向对象方法进行分析 设计 编程,用uml建模语言 在rational rose或visio等可视化建模工具进行建模。2 提交内容 1 每个阶段结束要提交相应的模型 文...