人的记忆力会随着岁月的流逝而衰退,写作可以弥补记忆的不足,将曾经的人生经历和感悟记录下来,也便于保存一份美好的回忆。写范文的时候需要注意什么呢?有哪些格式需要注意呢?以下是小编为大家收集的优秀范文,欢迎大家分享阅读。
电子钟程序乱了怎么调篇一
题目
专业 通信工程 班级 11级1班 学号 姓名
电 子 钟 设 计
单片机原理与应用课程设计
电子钟设计
功能要求:
1、设计一个电子时钟,要求可以显示时、分、秒,用户可以设置时间。
2、实现秒表功能。
功能描述
(1)
时钟。初始界面是时钟显示,按键s1是调时选位,按键s2是加数。根据不同的闪烁位置进行调节。
(2)
年与日,星期。在初始状态下,按下s2,则跳转,显示年月日,5s后跳回初始界面。若在年月日界面再次按下s2,则再次跳转,显示星期,几秒后跳转回初始界面。
(3)
秒表。在初始界面下,按下s3,则跳转,进入秒表。秒表功能键如下:s1 退出秒表;s2 停止开始计时;s3 秒表清零。
(4)
闹钟。在设置中设置好时间,最高位设为“1”则打开闹钟。最高位设为“0”则关闭闹钟。在闹钟响是,按s3进行关闹钟。
工作原理 硬件
采用80c51系列单片机作为cpu,p0口作为数据线,通过锁存器进行段选和位选,是数码管不断地显示数字。数码管的显示是扫描式。(1)
本电子钟用的单片机型号是stc89c516rd+。p0口作为段选和位选的数据线。p10口为段选寄存器的使能端。p11口为位选寄存器的使能端。晶振采用的12mhz晶振。要求频率稳定。
(2)
本电子钟用的是共阴极数码管。从左到右,第1,2位是秒位;第4,5位是分位;第7,8位是时位。第3,6位是“--”。
(3)
通过单片机的p0口,先对数码管进行位选,即在位锁存器使能是将p0口数据进行锁存。再通过段锁存器将p0口送来的段数据进行锁存。此时数码管的第一位显示数字。同样的步骤进行第二位显示。以非常快的速度进行,由于人眼的余辉效应,会看到8位数码管一起亮。即可以显示时间。通过单片机的内部to,t1的计数。即可以实现时钟,秒表等功能。(4)电路图如下:
软件
程序代码包括三部分:(部件库)(主函数)3.h(头文件库)。一 .bujian(部件库)(1)xianshi.c #include
p0=t[s%10];p11=0;p0=0xff;delay(m);p10=1;p10=0;p11=1;p0=0xbf;p11=0;
//消隐
p0=t[s/10];
//消隐 //数码管秒十位
p0=0xff;delay(m);} void led_f(unsigned int s){ p10=1;// p0=t[s%10];p10=0;p11=1;p0=0xef;
p11=0;
p0=0xff;delay(m);p10=1;
p0=t[s/10];p10=0;p11=1;p0=0xf7;p11=0;
p0=0xff;delay(m);} void led_h(unsigned int s){
// p10=1;p0=t[s%10];p10=0;p11=1;p0=0xfd;
p11=0;// p0=0xff;delay(m);p10=1;
p0=t[s/10];p10=0;p11=1;p0=0xfe;p11=0;
数码管分个位 //消隐
//数码管分十位
//消隐
数码管时个位
消隐
//数码管时十位
//消隐
p0=0xff;delay(m);}
void line(void){ p10=1;p0=0x40;p10=0;p11=1;p0=0xfb;delay(m);p11=0;
p10=1;p0=0x40;p10=0;p11=1;p0=0xdf;p11=0;delay(m);}
//消隐
p0=0xff;
//数码管“---”
//消隐
p0=0xff;
//数码管“---”
(2)miaobiao.c #include
(3)delay.c #include
{ unsigned char l;
while(a--)
{for(l=0;l<100;l++);} }
(4)gongneng.c #include
// while(1){ led_s(r);delay(2);led_f(y);delay(2);line();led_h(nian);delay(2);aa++;if(s2==0)
{ while(!s2)
{
led_s(r);delay(1);line();led_f(y);delay(1);led_h(nian);delay(1);}
//星期显示
while(1)
{led_f(xing);delay(2);
bb++;
if(bb==100){bb=0;break;}
日期显示 }
}
if(aa==100)
line();led_f(y);delay(1);led_h(nian);delay(1);
} } if(s1==0){ delay(3);if(s1==0){
switch(x){ case 1 : if(shanshuo==1){led_s(s);} line();led_f(f);delay(2);led_h(h);delay(2);break;case 2 :led_s(s);if(shanshuo==1){led_f(f);} delay(2);line();led_h(h);delay(2);break;case 3 : led_s(s);led_f(f);delay(2);line();if(shanshuo==1){led_h(h);} delay(2);break;case 4 : if(shanshuo==1){led_s(r);} led_f(y);delay(2);line();led_h(nian);delay(2);break;case 5 : led_s(r);if(shanshuo==1){led_f(y);} delay(2);line();led_h(nian);delay(2);break;case 6 :led_s(r);led_f(y);delay(2);line();if(shanshuo==1){led_h(nian);} delay(2);break;case 7 :if(shanshuo==1){led_f(xing);delay(5);} break;case 8 :if(shanshuo==1){led_s(nf);} line();led_f(nh);delay(2);led_h(ns);delay(2);break;case 9 :led_s(nf);if(shanshuo==1){led_f(nh);} delay(2);line();led_h(ns);delay(2);break;case 10:led_s(nf);led_f(nh);delay(2);line();if(shanshuo==1){led_h(ns);} delay(2);break;default : break;}
aa++;if(s2==0){ while(!s2){if(x==1||x==2||x==3){ led_s(s);delay(1);line();led_f(f);delay(1);led_h(h);delay(1);} if(x==4||x==5||x==6){ led_s(r);delay(1);line();led_f(y);delay(1);led_h(nian);delay(1);} if(x==7){ led_f(xing);} if(x==8||x==9||x==10){led_s(nf);led_f(nh);delay(2);line();led_h(ns);delay(2);} }
switch(x)
{ case 1 : s++;if(s>59)s=0;break;
while(!s1);while(1)
{ if(x==1||x==2||x==3)tr0=0;else tr0=1;if(aa==20){shanshuo=!shanshuo;aa=0;}
{ break;} { led_s(r);delay(1);
} if(s1==0)
case 2 :
}
f++;if(f>59)f=0;break;
case 3 : h++;if(h>23)h=0;break;case 4 : r++;if(r>31)r=1;break;case 5 : y++;if(y>12)y=1;break;case 6 : case 7 :
nian++;if(nian>20)nian=10;break;xing++;if(xing>7)xing=1;break;
case 8 : nf++;if(nf>59)nf=0;break;case 9 : nh++;if(nh>23)nh=0;break;case 10: ns=!ns;break;
default: break;{while(!s1){if(x==1||x==2||x==3){ led_s(s);delay(1);line();led_f(f);delay(1);led_h(h);delay(1);} if(x==4||x==5||x==6){ led_s(r);delay(1);line();led_f(y);delay(1);led_h(nian);delay(1);} if(x==7){ led_f(xing);} if(x==8||x==9||x==10){led_s(nf);led_f(nh);delay(2);line();led_h(ns);delay(2);} }
x++;if(x>10){ x=0;tr0=1;break;} } } } } } } 二.h(头文件库)(1)delay.h #ifndef _delay_h__
void led_s(unsigned int s);void led_h(unsigned int s);#define _delay_h__ void delay(unsigned int a);#endif(2)xianshi.h #ifndef _xianshi_h__ #define _xianshi_h__
void led_f(unsigned int s);void line(void);#endif(3)gongneng.h
#ifndef _dongneng_h__ #define _gongneng_h__ void gongneng(void);#endif(4)miaobiao.h
#ifndef _miaobiao_h__ #define _miaobiao_h__ void miaobiao(void);#endif(5)dingyi.h #ifndef _dingyi_h__ #define _dingyi_h__ sbit s1=p2^4;
sbit s2=p2^5;
sbit s3=p2^6;sbit p10=p1^0;sbit p11=p1^1;sbit p12=p1^2;#endif
//流水灯使能端 //按键1 //按键2 //按键3 sbit p37=p3^7;//蜂鸣器时能
(主函数)(1)main.c #include
//关闭流水灯
et1=1;th1=(65535-5000)/256;tl1=(65535-5000)%256;tr1=0;while(1){ if((s3==0)&&(ns==0)){while(!s3);miaobiao();} if(s1==0||s2==0)gongneng();else { led_s(s);line();led_f(f);line();led_h(h);} if((f==nf)&&(h==nh)&&(ns==1))ll=1;else ll=0;} } void zhongduan(void)interrupt 1 {
if((ll==1)&&(ns==1))
{ p37=!p37;if((s3==0)&&(ns==1)){ while(!s3)ns=0;p37=1;} } n++;if(n==5000){n=0;s++;if(s==60){ s=0;f++;} if(f==60){ f=0;h++;}
if(h==24){ h=0;r++;xing++;} switch(r){ case 29 : if(nian/4==0){if(y==2)r=0;} y++;case 31 : if(y==4||y==6||y==9||y==11){ } if(xing>7)xing=1;if(y==13){ y=1;nian++;} } } default : break;
break;case 30 : if((nian/4)!=0){if(y==2){ r=0;y++;}} break;
r=0;y++;} break;case 32 : if(y==1||y==3||y==5||y==7||y==8||y==10||y==12){r=0;y++;} break;void zhongduan1(void)interrupt 3
{
th1=(65535-5000)/256;
m++;tl1=(65535-5000)%256;if(m==2){mms++;m=0;if(mms>=100){ mms=0;ms++;} if(ms==60){ ms=0;mf++;} if(mf==60){ mf=0;} } }
参考文献:
单片机中级教程(第2版)、单片机语言c51程序设计(赵文博)感想: 这次课程设计整体来说是成功的,但我也发现了自己许多错漏和不足之处。譬如,最简单的程序没写好就想着写更复杂的程序,做事还是缺乏耐性和细心,当有时遇到问题时,总觉得无从下手,对于课本上的知识不能很好的组织起来。在编写各功能程序时,特别是后来增添的比较复杂的程序
电子钟程序乱了怎么调篇二
#include
#define uint unsigned int
#define key_io p3
#define lcd_io p0
sbit lcd_rs = p2^0;
sbit lcd_rw = p2^1;
sbit lcd_en = p2^2;
sbit spk = p1^2;
sbit led = p2^4;
sbit key_0 = p3^7;
sbit key_1 = p3^6;
sbit key_2 = p3^5;
sbit key_3 = p3^4;
bit new_s, modify = 0;
char t0, sec = 0, min = 0, hour = 0;
char code lcd_line1[] = “i love u”;
char code lcd_line2[] = “timer: 00:00:00 ”;char timer_buf[] = “00:00:00”;
char a,b,c,k = 0;
//--------------------void delay(uint z)
{
uintx, y;
for(x = z;x > 0;x--)
for(y = 100;y > 0;y--);
}//--------------------void w_lcd_com(uchar com)//写指令 {
lcd_rs = 0;
lcd_io = com;// lcd_rs和r/w都为低电平时,写入指令
lcd_en = 1;delay(5);lcd_en = 0;//用en输入一个高脉冲 }
//--------------------void w_lcd_dat(uchar dat)//写数据
{lcd_rs = 1;lcd_io = dat;// lcd_rs为高、r/w为低时,写入数据lcd_en = 1;delay(5);lcd_en = 0;//用en输入一个高脉冲 }
//--------------------void w_lcd_str(uchar *s)//写字符串 {while(*s)w_lcd_dat(*s++);}
//--------------------
void w_buff(void)//填写显示缓冲区
{timer_buf[7] = sec % 10 + 48;timer_buf[6] = sec / 10 + 48;timer_buf[4] = min % 10 + 48;timer_buf[3] = min / 10 + 48;timer_buf[1] = hour % 10 + 48;timer_buf[0] = hour / 10 + 48;w_lcd_str(timer_buf);}
//--------------------
uchar read_key(void){ucharx1, x2;key_io = 255;x1 = key_io;if(x1!= 255){delay(100);x2 = key_io;if(x1!= x2)return 255;while(x2!= 255)x2 = key_io;if else if(x1 == 0xbf)return 1;else if(x1 == 0xdf)return 2;else if(x1 == 0xef)return 3;else if(x1 == 0xf7)return 4;}return 255;} //--------------------
void init(){lcd_rw = 0;w_lcd_com(0x38);delay(50);w_lcd_com(0x0c);w_lcd_com(0x06);w_lcd_com(0x01);w_lcd_com(0x80);w_lcd_str(lcd_line1);w_lcd_str(lcd_line2);
tmod = 0x01;//t0定时方式1th0 = 0x4c;tr0 = 1;//启动t0
pt0 = 1;//高优先级, 以保证定时精度
et0 = 1;ea = 1;}
//--------------------
void main(){uint i, j;uchar key;init();while(1){//
if(new_s){ //如果出现了新的一秒, 修改时间
new_s = 0;sec++;sec %= 60;if(!sec){min++;min %= 60;if(!min){ hour++;hour %= 24;}}w_buff();//写显示
w_lcd_com(0xc0 + 7);(x1 == 0x7f)return 0;w_lcd_com(0xc0);
//
if(!sec &&!min){ //整点报时
for(i = 0;i < 200;i++){spk = 0;for(j = 0;j < 100;j++);spk = 1;for(j = 0;j < 100;j++);} }} //key = read_key();//读出按键
switch(key){//分别处理四个按键
case0: if(key_0){min++;min %= 60;w_buff();break;}case1: if(key_1){hour++;hour %= 24;w_buff();break;}case2: if(key_2){ a=sec;b=min;c=hour;sec = 0, min = 0, hour = 0;}case3: if(key_3){sec=a+sec;if(sec>60){sec=sec-60;min++;}min=b+min;if(min>60){min=min-60;hour++;}hour=c+hour;if(hour>24){hour=hour-24;} }} }} //--------------------
void timer0(void)interrupt 1//t0中断函数, 50ms执行一次{th0 = 0x4c;t0++;t0 %= 20;//20, 一秒钟if(t0 == 0){new_s = 1;led = ~led;}if(modify)led = 0;} k0分加一 k1时加一 k2秒表开始
k3秒表结束,恢复正常时间!
电子钟程序乱了怎么调篇三
课程设计任务书
(指导教师填写)
课程设计名称电子技术课程设计学生姓名专业班级设计题目数字钟
一、课程设计的任务和目的任务:设计一台能显示“时”、“分”、“秒”的数字钟,周期为24小时;具有校时、正点报时功能。
目的:培养学生综合运用所学知识的能力,综合设计能力,培养动手能力及分析问题、解决问题的能力。
二、设计内容、技术条件和要求
1.数字钟可显示“时”、“分”、“秒”,且“时”、“分”、“秒”分别用两个数码管显示,计满23小时60分钟60秒,则全部清零。
2.具有校时功能,时、分校时用1hz的信号进行,而秒较时用2hz时钟信号进行。
3.整点能自动报时。要求报时声响为四低一高,最后一响为整点,前四声用500hz信号让喇叭发声,最后一声用1000hz信号。
4.根据上述要求,画出电路总框图,简述各部分工作原理。
5.进行各部分电路的设计,要求有分析过程、原理图表示。
6.对原理图进行仿真。
7.在实验箱上组装、调试。
8.撰写设计总结报告。
三、时间进度安排
第一周:理论设计。
周一上午布置设计任务,讲解设计要求,安排答疑、实验时间;
周三、周四下午课程设计答疑,其他时间学生查资料,做初步理论设计;
周五交设计初稿,由指导教师审查;
第二周:仿真和安装调试、撰写设计总结报告
周一、二学生进实验室做仿真实验,并根据实验情况修正设计图;
周三至周五做插接线实验,最后根据实验情况总结、撰写设计说明书。
四、主要参考文献
1.各种版本的数字电子技术基础教材
2.各种版本的电子技术课程设计指导书
3.集成电路手册
指导教师签字:年月日
电子钟程序乱了怎么调篇四
org0000h
ljmpmain
org001bh
ljmploop
org0100h
main:mov21h,#17h
mov22h,#3ah
mov23h,#00h;设定时间初值
mov36h,#10
mov39h,#10
movr7,#14h;循环20次50*20=1000msmovdptr,#0f003h
mova,#10000000b;8255命令口地址movx@dptr,a
movtmod,#10h
movth1,#3ch
movtl1,#0b0h;设定计时初值
movie,#88h;设定中断运行位
setbtr1
lop:lcallstart
lcalldsn;调用显示程序
ljmplop
loop:movth1,#3ch;重装时间初值
movtl1,#0b0h
djnzr7,loop1;循环结束
movr7,#14h
inc23h
mova,23h
cjnea,#3ch,loop1
mov23h,#00h
inc22h
mova,22h
cjnea,#3ch,loop1
mov22h,#00h
inc21h
mova,21h
cjnea,#18h,loop1
mov21h,#00h
mov22h,#00h
mov23h,#00h
loop1: reti
start: movr1,#21h;将小时放在两个位地址中mova,@r1
movb,#0ah
divab
mov3bh,a
mov3ah,b
incr1
mova,@r1
movb,#0ah
divab
mov38h,a
mov37h,b
incr1
mova,@r1
movb,#0ah
divab
mov35h,a
mov34h,b
ret
dsn:movr0,#34h;显示子程序;显示数据缓冲区首址送r0
movr3,#7fh;使显示器最左边位亮
lp1:movdptr,#0f000h;数据指针指向a口
mova,r3
movx@dptr,a;送扫描值
incdptr;数据指针指向b口mova,@r0;取欲显示数据的字形码表位
pushdph
pushdpl;显示查表指令地址偏移量
movdptr,#tab
movca,@a+dptr;取出字形码
popdpl
popdph
movx@dptr,a;送出显示
acalldelay;调用延时子程序
incr0;指向下一个显示缓冲区地址mova,r3
jnbacc.0,lp2;扫描到第八个显示器?
rra;未到,扫描码右移一位
movr3,a
ajmplp1
lp2:ret
tab:db0fch,60h,0dah,0f2h,66h,0b6h
db0beh,0e0h,0feh,0f6h,02h,0dfh
delay: movr5,#05h;延时子程序
dl1:movr6,#0ffh
dl2:djnzr6,dl2
djnzr5,dl1ret
end
电子钟程序乱了怎么调篇五
单片机课程设计电子钟设计
目录
一、摘要
二、设计任务
三、基本原理
数码管显示可以用静态显示或动态显示方法。静态显示需要数据锁存器等硬件,接口复杂,时钟显示用四个数码管。动态显示相对简单,但需动态扫描,扫描频率要大于人视觉暂留频率,信息看起来才稳定。译码方式可分为软件译码和硬件译码,软件译码通过译码程序查的显示信息的字段码;硬件译码通过硬件译码器得到显示信息的字段码,实际中通常采用软件译码。
在具体处理时,定时器计数器采用中断方式工作,对时钟的形成在中断服务程序中实现。在主程序中只需对定时器计数器初始化、调用显示子程序和控制子程序。另外,为了使用便,设计了简单的按键,可以通过按键实现时、分的调整,这样在主程序中就加入了按键设置子程序。
四、编程算法思路
五、程序流程图
六、硬件单元设计
七、软件单元设计
八、调试结果分析
九、设计总结及心得体会
十、参考文献
一设计任务
1、基本任务:利用定时器/计数器中断和静态显示或动态显示,实现电子时钟的时分秒精确走时和校准
。时间显示用四个数码管分别显示时、分、秒用点表示,在时和分的中间闪动,时间显示格式(18:49)
时间校准用2个键实现:一个键k1作移位选择(选中要修改的位,选中的位用闪烁指示),一个键k2做加1(对选中的位进行加1修改)。
2、功能增强型任务:在基本任务的基础上加上日历功能、准时报时功能和跑表功能
(1)日历功能:能实现时、分、秒和年、月、日计时,增加1个按键控制分3屏例如显开始的第1屏默认显示“时、分、秒”四位+秒点,按下k3键显示“月和日”四位,再按下课k3键显示“年份”四位,再按下k3键显示“时、分、秒”,依次类推。程序要能处理闰年、闰月功能。
(2)准点报时功能:可以在增加一个按键k4设计具有闹钟功能,实现定点报时。具体操作是:按下
k4键,进入闹钟设置功能,再通过k1、k2键来完成定点报警时间的设置。
(3)跑表功能:再增加一个按键k5设计跑表功能,实现启动毫秒计数,相当与田径运动比赛的跑
表工作。
三基本原理
软件时钟时利用单片机内部的定时器/计数器来实现的,它的过程如下:首先定单片机内部的一个定时器/计数器工作于定时方式,对机器周期形成基准时间,然后用另一个定时器/计数器或软件计数的方法对基准时间计数形成秒,秒计60次形成分,分计60次形成小时,小时计24次则计满一天。然后通过数码管把它们的内容在相应位置显示出来即可。
四编程算法思路
1、主程序的设计:串行口工作方式0,定时器/计数器1工作在方式1进行初始化,然后通过循环(调用显示子程序)等待定时中断的到来。
2、按键的控制:key1控制时的调节,key2控制分的调节,key3控制时、分定型
3、中断服务程序的设计:中断服务程序主要功能是实现时、分、秒的计时处理。
4、时、分、秒计时的实现:秒计时时采用中断方式进行溢出次数的累计得到的。从秒到分,从分到时可通过软件的累加和比较到位方法来实现。要求每满1秒,则“秒”单元中的内容加1;“秒”单元每满60,则“秒”单元清0,同时“分”单元中的内容加1;“分”单元每满60,则“分”单元清0,同时“时”单元加1。“时”单元每满24,则将“时”单元清0。
5、显示子程序:采用数码管静态显示来显示时钟的走动
6,延时子程序:用来实现按键操控延时和实现整点12时报时
五程序流程图
六硬件单元设计
1、电路总设计图
2、at89c51芯片
七软件单元设计
1、资源分配:定时器t1,p1.6为调整时钟,p1.5为调整分钟,p1.4为控制调整
30h秒显示单元,31h分显示单元,32h时显示单元,08h放分调整标
志,09h放时调整标志,0ah放闪烁标志
2、程序清单(加注释)
八调试结果分析
在实验操作过程中,将所写好的程序打入计算机内,通过编译检查其是否有错误,如有错误将其改正,直至无误后下载仿真器,实现运行。观察实验箱上的数码管显示,判断其是否为所需结果,如果与所要求的有差别,需继续调试,重新修改程序,检查硬件设施不断地调试,不断地检查直至得到所要的结果。在调试过程中,开始运行时能够实现时钟的显示,但是无法实现其闪烁功能,后经不断调试修改及同学的帮助最终实现该功能,能够达到时钟显示调节的基本要求,还可以实现整点报时。但在增加其功能显示年月时又出现一定的问题,未能实现该功能,程序存在一定的不足性,需继续完善,实现更多的功能
九设计总结及心得体会
经过两天的单片机课程设计,终于完成了我的电子时钟的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把一些基本功能都做了出来,只是一些增强型功能未能实现。
在本次设计的过程中,我发现很多的问题,虽然以前还做过一些实验但这次设计真的让我长进了很多单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,要有通篇的全局思想考虑问题。在操作的过程中,出现许多错误,都是在连接处不能够上下连贯正确运行,还需继续努力。有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在课程设计中的最大收获,同时,要把所学只是灵活应用才能真正领悟其中的意义,加深对它的理解与掌握。还有,通过此次的操作也使我的实践操作能力得到了进一步的提高。
十参考文献
【1】张毅刚,彭喜元,董继成。单片机原理及应用。北京:高等教育出版社,2003
【2】周航慈。单片机应用程序设计技术(修订版)。北京:北京航空航天大学出版社,2002
【3】万光毅等。单片机实验与实践教程。北京:北京航空航天大学出版社,2003
【4】何立民,i2c总线应用系统设计。北京:北京航空航天大学出版社,2002
【5】周航慈,朱兆优,李跃忠。智能仪器原理与设计。北京:北航大学出版社,2005
200>100>
一键复制