基于单片机定时闹钟毕业论文 - 图文(8)

2019-03-21 18:14

江西理工大学2012届专科生毕业设计(论文)

附录1 单片机定时闹钟程序源代码

#include //头文件 #include

#define uchar unsigned char #define uint unsigned int #define fmq RD

sbit key1=P2^0; //位声明 sbit key2=P2^1; sbit key3=P2^2; sbit key4=P2^3;

uchar code table[]={0x3f,0x06,0x5b,//数码管显示的数值 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, 0xbf,0x86,0xdb,//带小数点的数值 0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

void plus(); //函数声明

void minus(); void sint();

uchar table_1[6]; //定义数组,数组内含有6个数值

uchar table_2[6];

uchar shi=1,fen=1,miao=30; //显示初始值

uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;//定义全局变量 uchar flag,flag1,flag2,cnt,cnt1,count;//定义全局变量

void delay(uchar i) //延时函数,用于动态扫描数码管 {

uchar x,y;

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

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

void init() //初始化函数 {

TMOD=0X21; //工作方式1

TH0=(65536-50000)/256; //定时时间为:50ms TL0=(65536-50000)%6; ET0=1; //打开定时器 EA=1; //开总中断

//MODIFIED

//宏定义 //宏定义

31

江西理工大学2012届专科生毕业设计(论文)

TR0=1; //启动定时器 SCON = 0x50; (串口初始化)

//0101 0000 SM1SM2=10,方式二 REN=1允许接受

TH1 = 0xFD;

TR1 = 1; //启动T/C1 ES = 1;

}

void display() //显示子函数,用于显示时间数值 {

uchar i,j;

table_1[0]=miao; //分离秒的各位与十位 table_1[1]=miao/10;

table_1[2]=fen+11; //分离分的各位与十位 table_1[3]=fen/10;

table_1[4]=shi+11; //分离时的各位与十位 table_1[5]=shi/10;

j=0x7f; //从秒到时的扫描 for(i=2;i<6;i++)

{

P2=j;

P0=table[table_1[i]];//显示数值 delay(10);

j=_cror_(j,1);//循环右移 }

}

void display_1() //显示子函数,用于显示定时时间 {

uchar i,j;

table_2[0]=miao2; //以下含义同上 table_2[1]=miao2/10; table_2[2]=fen2+11; table_2[3]=fen2/10; table_2[4]=shi2+11; table_2[5]=shi2/10; j=0x7f; for(i=2;i<6;i++) {

P2=j;

P0=table[table_2[i]]; delay(10);

32

江西理工大学2012届专科生毕业设计(论文)

j=_cror_(j,1); } }

void shijian() //时间子函数

{

if(flag>=20) //判断是否到一秒 {

flag=0; //到了,则标志位清零 miao++; //秒加1

if(miao>=60) //判断秒是否到60s {

miao=0;//到了,则清零 fen++; //分加1

if(fen>=60) //以下含义同上

{

fen=0; shi++; if(shi>23) shi=0; }

} } }

void key_scan() //键盘扫描子函数 {

uchar i; //定义局部变量

if(key1==0) //判断key1是否按下 {

while(!key1) //防止掉显 {

if(cnt==0) {

display(); }

if(cnt==3||cnt==4) {

display_1();

} if(cnt==1&&(cnt1==0||cnt1==2))

33

//MODIFIED

江西理工大学2012届专科生毕业设计(论文)

display_1();

if(cnt==2&&(cnt1==0||cnt1==2)) {display(); cnt=0; if(cnt1==1&(cnt==1||cnt==2))

}

display();

}

cnt++; //记下按键key1按下的次数

cnt=cnt%5;

if(cnt==1&&cnt1==1) //以下含义同上

{

fen1=fen; fen=99;

for(i=0;i<100;i++) display(); fen=fen1; }

if(cnt==2&&cnt1==1) {

shi1=shi; shi=99;

for(i=0;i<100;i++) display(); shi=shi1; }

if(cnt==3&&cnt1==1) {

fen1=fen2; fen2=88; for(i=0;i<100;i++) display_1(); fen2=fen1; }

if(cnt==4&&cnt1==1) {

shi1=shi2; shi2=88;

for(i=0;i<100;i++) display_1();

34

江西理工大学2012届专科生毕业设计(论文)

shi2=shi1; }

} if(key2==0)

{

while(!key2) //防止掉显

{

if(cnt==0) {

display(); }

if(cnt==3||cnt==4) {

display_1(); }

if(cnt==1&&(cnt1==0||cnt1==2)) display_1();

if(cnt==2&&(cnt1==0||cnt1==2))

{display(); cnt=0; } if(cnt1==1&(cnt==1||cnt==2))

display();

}

cnt1++;

cnt1=cnt1%3;

if(cnt!=0&&cnt1==1) //第一次按下,停止计数

TR0=0;

if(cnt1==2) { TR0=1; //开始计数 cnt=0; //按下次数清零

} }

if(key3==0) //判断key3是否按下 {

while(!key3) //防止掉显 {

if(cnt==0)

35


基于单片机定时闹钟毕业论文 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:安规题库 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: