OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5050|回复: 8

成都信息工程学院第六届星云杯作品:多功能电子钟软件设计-低年级组(大一)-张磊组

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-4-26
在线时间
0 小时
发表于 2013-6-1 17:30:27 | 显示全部楼层 |阅读模式
 低年级组------张磊组
            1、作品介绍
                该软件是基于STC12C5A60S2单片机,该软件主要分两个部分,一个部分是:电子钟部分,软件主要是依靠DS1302时钟芯片进行时钟软件设计。另一部分:测量电阻部分,主要是依靠STC12C5A60S2内部自带ADC功能进行设计完成的。该软件可以显示年、月、日、时、分、秒、星期、闹钟、测量电阻的阻值的信息,可以通过两个独立按键设置年、月、日、时、分、秒、星期、闹钟、测量电阻的阻值的信息。如果时间、测量电阻和设定的时间、设定的电阻相同,将通过闪烁LED进行提示。
        2、作品图片



3、视频

4、部分代码
        
        

1、主程序代码

 

    uchar i;

    float adc1,adc2;       

   

    lcd1602init();              //初始化液晶

    adcinit();              //初始化ADC

    i=ds1302addrrbyte(0x8d);   //读回年寄存器的值

    if(i==0)                //年寄存器为0DS1302就初始化,不为零就不初始化

       ds1302init();

 

    while (1)

    {  

       adc1=adcres(1);

       adc2=adcres(2);

       res(adc1,adc2);

       keyscan();

       alarm();

    }

22ADC代码

float adcres(uchar ch)

{

        uint result=0;

        float vin=0, bai=0,shi=0,ge=0;

        ADC_CONTR=adcpower|adcspendhh|ch|adcstart;    //AD转换

        while(!ADC_CONTR&adcflag);  //等待转换完成

        result=ADC_RES<<2;

        result|=ADC_RESL;//

        ADC_CONTR=0xe9;      //不关AD电源,flag清零,开AD转换

        vin=result*5/1024;   //处理后为浮点数

        return vin;         

}

3ADC数据处理  

uint res(float num1,float num2)

{

        uint xy=0;

        xy=1000*(num1-num2)/num2;

        return xy;

}

4、功能按键代码

case 1:

lcd1602writecom(0x80+0x40+6);      //设置按键按动一次,秒位置显示光标

       lcd1602writecom(0x0f);             //光标为闪烁

       temp=(second)/10*16+(second)%10;   //秒数据写入DS1302

       ds1302addrwbyte(0x8e,0x00);

       ds1302addrwbyte(0x80,0x80|temp);

       ds1302addrwbyte(0x8e,0x80);

       break;

 

case 2:  lcd1602writecom(0x80+0x40+0x03); //2minute位置显示光标

    break;

    ……(其他按键相似此处不列出)

case 9:

    lcd1602writecom(0x0c);

    temp=(second)/10*16+(second)%10;

    ds1302addrwbyte(0x8e,0x00);

    ds1302addrwbyte(0x80,0x00|temp);   //second数据写入DS1302           

    ds1302addrwbyte(0x8e,0x80);

    default :

    ;

5、加键代码

case 1:

    second++;//设置键按动1次,调秒

    if(second==60)

        second=0;//秒超过59,再加1,就归零

    lcd1602writetwo(0x80+0x40+0x06,second);//LCD在正确位置显示

    ds1302addrwbyte(0x8e,0x00); //允许写,禁止写保护

    ds1302addrwbyte(0x80,((second/10)<<4|(second%10))); //秒寄存器写入调整后的秒BCD

    ds1302addrwbyte(0x8e,0x80); //打开写保护

    lcd1602writecom(0x80+0x40+0x07);//写入数据后,光标自动右移,要返回

    break;

……(其他按键相似此处不列出)

case 8:

lhour++;

if(lhour==24)

lhour=0;

lcd1602writetwo(0x80+0x0a,lhour);//LCD在正确的位置显示

temp=(lhour)/10*16+(lhour)%10;//十进制转换成DS1302要求的DCB

ds1302addrwbyte(0x8e,0x00);//允许写,禁止写保护

ds1302addrwbyte(0xe0,temp);//小时寄存器写入调整后的小时BCD

ds1302addrwbyte(0x8e,0x80);//打开写保护

lcd1602writecom(0x80+0x0a);//写入数据后,回位

break;

6、从DS1302读时间代码

void ds1302gettime(systemtime *time)

{

    uchar readvalue;

 

    readvalue=ds1302addrrbyte(DS1302_SECOND);

    time->second=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

     readvalue=ds1302addrrbyte(DS1302_MINUTE);

    time->minute=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

    readvalue=ds1302addrrbyte(DS1302_HOUR);

    time->hour=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

    readvalue=ds1302addrrbyte(DS1302_DAY);

    time->day=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

    readvalue=ds1302addrrbyte(DS1302_WEEK);

    time->week=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

    readvalue=ds1302addrrbyte(DS1302_MONTH);

    time->month=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

    readvalue=ds1302addrrbyte(DS1302_YEAR);

    time->year=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

    readvalue=ds1302addrrbyte(0xc1);

    time->lminute=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

    readvalue=ds1302addrrbyte(0xe1);

    time->lhour=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

    readvalue=ds1302addrrbyte(0xf1);

    time->res1=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

 

    readvalue=ds1302addrrbyte(0xd1);

    time->res2=((readvalue&0x70)>>4)*10+(readvalue&0x0f);

}
                

CIMG2831.AVI

47.35 MB, 下载次数: 194

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2013-3-22
在线时间
0 小时
发表于 2013-6-1 17:36:03 | 显示全部楼层
回复【楼主位】electricer:
---------------------------------
用的开发板???什么开发板了,有没有这个开发板的原理图, 最近在做一块开发板,就用的这款单片机,可是有点问题,可以对比一下
回复 支持 反对

使用道具 举报

108

主题

1440

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2233
金钱
2233
注册时间
2012-4-30
在线时间
7 小时
发表于 2013-6-1 17:37:09 | 显示全部楼层
支持下~
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-4-26
在线时间
0 小时
 楼主| 发表于 2013-6-1 18:06:26 | 显示全部楼层
这个就是我用的开发板的原理图

LY-51S V2.3 电路原理图.pdf

106.25 KB, 下载次数: 375

回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-4-26
在线时间
0 小时
 楼主| 发表于 2013-6-1 18:07:05 | 显示全部楼层
回复【2楼】华师单车汉:
---------------------------------
我给出来老的,你自己下一下
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2013-4-26
在线时间
0 小时
 楼主| 发表于 2013-6-1 18:07:29 | 显示全部楼层
回复【3楼】lsj9383:
---------------------------------
thank you
回复 支持 反对

使用道具 举报

51

主题

1456

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2612
金钱
2612
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-6-1 19:07:13 | 显示全部楼层
不错不错,支持下你。
一直努力就很好。
回复 支持 反对

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2013-6-2 01:04:54 | 显示全部楼层
顶.
回复 支持 反对

使用道具 举报

9

主题

92

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2013-3-22
在线时间
0 小时
发表于 2013-6-2 14:37:37 | 显示全部楼层
回复【5楼】electricer:

回复【2楼】华师单车汉:
---------------------------------
我给出来老的,你自己下一下

---------------------------------
谢谢啊!哈哈哈哈 真还有!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 12:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表