找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8861|回复: 26
收起左侧

STM32先学F1还是F4?

  [复制链接]
ID:426549 发表于 2018-11-14 18:02 | 显示全部楼层 |阅读模式

单选投票, 共有 64 人参与投票 查看投票参与人

投票已经结束

39.06% (25)
14.06% (9)
46.88% (30)
您所在的用户组没有投票权限
回复

使用道具 举报

ID:422574 发表于 2018-11-14 18:27 | 显示全部楼层
其实都行,原理是相通的,学会以后看什么都简单
回复

使用道具 举报

ID:426661 发表于 2018-11-14 20:49 | 显示全部楼层
都可以的
回复

使用道具 举报

ID:250696 发表于 2018-11-14 21:09 | 显示全部楼层
学F4吧,某种程度上F4比F1要简单,比如复用时钟。
回复

使用道具 举报

ID:426695 发表于 2018-11-14 21:23 | 显示全部楼层
我觉得还是要看想去做的目的吧,个人认为都行
回复

使用道具 举报

ID:426751 发表于 2018-11-14 22:35 来自手机 | 显示全部楼层
先f1,f1比较容易入手
回复

使用道具 举报

ID:286327 发表于 2018-11-14 22:43 | 显示全部楼层
F1吧,感觉简单一点点
回复

使用道具 举报

ID:150257 发表于 2018-11-14 23:14 | 显示全部楼层
F1比较简单
回复

使用道具 举报

ID:422277 发表于 2018-11-15 04:14 来自手机 | 显示全部楼层
都可以
回复

使用道具 举报

ID:426834 发表于 2018-11-15 08:49 | 显示全部楼层
#include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar a,count,S1num,xqnum; char yue,ri,shi,fen,miao; int nian; sbit lcdrs=P2^0; sbit lcdrw=P2^1; sbit lcden=P2^2; sbit S1=P2^4;                                //定义键——进入设置 sbit S2=P2^5;                                //定义键——增大 sbit S3=P2^6;                                //定义键——减小 sbit S4=P2^7;                                //定义键——退出设置 uchar code table0[]="2018-10-6 FRI"; uchar code table1[]="00:00:00"; uchar code xingqi[][3]={"MON","TUE","WED","THU","FRI","SAT","SUN"}; void delay(uint z)                                                         //延时1ms的程序 {         uint x,y;         for(x=z;x>0;x--)                 for(y=110;y>0;y--); } /************************************************** 1602液晶显示器模块 sbit lcdrs=P2^5; sbit lcdrw=P2^4; sbit lcden=P2^3; *************************************************/ void write_com(uchar com)                                        //液晶写指令 {         lcdrw=0;         lcdrs=0;         P0=com;         delay(5);         lcden=1;         delay(5);         lcden=0; } void write_data(uchar dat)                                        //液晶写数据 {         lcdrw=0;         lcdrs=1;         P0=dat;         delay(5);         lcden=1;         delay(5);         lcden=0; }  /******************************************** 年月日写入1602函数 ********************************************/ void write_sfm(uchar add,uchar dat)                           //写时分秒函数 {         uchar shi,ge;         shi=dat/10;         ge=dat%10;         write_com(0x80+0x40+add);         write_data(0x30+shi);         write_data(0x30+ge); } void write_yr(uchar add,uchar dat)                           //写月日函数 {         uchar shi,ge;         shi=dat/10;         ge=dat%10;         write_com(0x80+add);         write_data(0x30+shi);         write_data(0x30+ge); } void write_nian(uchar add,uint dat)                           //写年函数 {         uint qian,bai,shi,ge;         qian=dat/1000;         bai=dat%1000/100;         shi=dat%100/10;         ge=dat%10;         write_com(0x80+add);         write_data(0x30+qian);         write_data(0x30+bai);         write_data(0x30+shi);         write_data(0x30+ge); } /*************************************************** 初始化 ***************************************************/ void init_lcd()                                                          //液晶初始化 {         lcden=0;         nian=2014;         yue=8;         ri=13;         shi=0;                                                                   //初始shi、fen、miao         fen=0;         miao=0;         write_com(0x38);                                           //设置16x2显示,5x7点阵,8位数据口         write_com(0x0c);                                           //设置开显示,不显示光标         write_com(0x06);                                           //写一个字符后地址指针加1         write_com(0x01);                                           //显示清0,数据指针清0 }  void init()                                                                        //初始化函数 {         init_lcd();                                                                 //液晶初始化         write_com(0x80);                                                  //设置显示初始坐标         for(a=0;a<14;a++)                                                   //显示年月日初始值         {                 write_data(table0[a]);                 delay(5);         }         write_com(0x80+0x40);                                           //设置显示初始坐标         for(a=0;a<8;a++)                                                        //显示时分秒初始值         {                 write_data(table1[a]);                                                         delay(5);         }         write_nian(0,nian);         write_sfm(6,miao);                                                         //分别将shi、fen、miao送去液晶显示         write_sfm(3,fen);         write_sfm(0,shi);         count=0;         xqnum=0;         S1num=0;                                                                         //初始化全局变量count         TMOD=0x01;                                                                          //设置定时器0工作模式1         TH0=(65535-50000)/256;                                                  //定时器装初始值         TL0=(65535-50000)%256;         EA=1;                                                                                        //开总中断         ET0=1;                                                                                        //开定时器0中断         TR0=1;                                                                                        //启动定时器0 }  /************************************************** 独立键盘 sbit S1=P3^0;                                //定义键——进入设置 sbit S2=P3^1;                                //定义键——增大 sbit S3=P3^2;                                //定义键——减小 sbit S4=P3^3;                                //定义键——退出设置 独立键盘已接地 *************************************************/ void keyscan() {         if(S1==0)         {                 delay(5);                                        //确认定义键被按下                 if(S1==0)                 {                         S1num++;                                //定义键S1按下次数记录                         while(!S1);                                //释放按键确认                         if(S1num==1)                        //S1按下一次时                         {                                 TR0=0;                                //关闭定时器                                 write_com(0xc0+7);        //光标定位到秒位置                                 write_com(0x0f);        //光标闪烁                         }                         if(S1num==2)                         //S1按下两次时                         {                                 write_com(0xc0+4);         //光标定位到分位置                         }                         if(S1num==3)                          //S1按下三次时                         {                                 write_com(0xc0+1);          //光标定位到时位置                         }                         if(S1num==4)                          //S1按下四次时                         {                                 write_com(0x80+13);          //光标定位到星期位置                         }                         if(S1num==5)                          //S1按下五次时                         {                                 write_com(0x80+9);          //光标定位到日位置                         }                         if(S1num==6)                          //S1按下六次时                         {                                 write_com(0x80+6);          //光标定位到月位置                         }                         if(S1num==7)                          //S1按下七次时                         {                                 write_com(0x80+3);          //光标定位到年位置                         }                         if(S1num==8)                          //S1按下八次时                         {                                 S1num=0;                          //S1记录按键次数清零                                 TR0=1;                                  //开启定时器                                 write_com(0x0c);          //取消光标闪烁                         }                 }         }         if(S1num!=0)                                           //只有定义键按下后S2、S3、S4才有效         {                 if(S2==0)                 {                         delay(5);                                        //防抖                         if(S2==0)                                   //确认按键被按下                         {                                 while(!S2);                                //释放按键确认                                 if(S1num==1)                        //S1按下一次时                                 {                                         miao++;                                //调整秒加1                                         if(miao==60)                //满60清零                                                 miao=0;                                         write_sfm(6,miao);                   //每调节一次送液晶显示一次                                         write_com(0x80+0x40+6);           //显示位置重新回到调节处                                 }                                 if(S1num==2)                           //S1按下两次时                                 {                                         fen++;                                        //调整分加1                                         if(fen==60)                                                 fen=0;                                         write_sfm(3,fen);                                         write_com(0x80+0x40+3);                                 }                                 if(S1num==3)                                 //S1按下三次时                                 {                                         shi++;                                          //调整时加1                                         if(shi==24)                                                 shi=0;                                         write_com(0x80+0x40);                                         write_sfm(0,shi);                                 }                                 if(S1num==4)                                                   //星期加调整                                 {                                         xqnum++;                                         if(xqnum==7)                                                 xqnum=0;                                         write_com(0x80+0x0b);                                         for(a=0;a<3;a++)                                         {                                                 write_data(xingqi[xqnum][a]);                                                 delay(5);                                         }                                 }                                 if(S1num==5)                                                                //日加调整                                 {                                         ri++;                                         if(yue==2)                                         {                                                 if(nian%4==0&&nian%100!=0||nian%400==0)                                                 {                                                         if(ri==30)                                                         {                                                                 ri=1;                                                         }                                                 }                                                 if(nian%400!=0)                                                 {                                                         if(ri==29)                                                         {                                                                 ri=1;                                                         }                                                 }                                         }                                         else if(yue<=7)                                         {                                                 if(yue%2==0&yue!=2)                                                 {                                                         if(ri==31)                                                         {                                                                 ri=1;                                                         }                                                 }                                                 else if(yue%2!=0&yue!=2)                                                 {                                                         if(ri==32)                                                         {                                                                 ri=1;                                                         }                                                 }                                         }                                         else if(yue>=8)                                         {                                                 if(yue%2==0)                                                 {                                                         if(ri==32)                                                         {                                                                 ri=1;                                                         }                                                 }                                                 else if(yue%2!=0)                                                 {                                                         if(ri==31)                                                         {                                                                 ri=1;                                                         }                                                 }                                         }                                         write_yr(8,ri);                                 }                                 if(S1num==6)                                                        //月加调整                                 {                                         yue++;                                         if(yue==13)                                                 yue=1;                                         write_yr(5,yue);                                 }                                                                                                                  if(S1num==7)                                                 //年加调整                                 {                                         nian++;                                         if(nian==2019)                                                 nian=2014;                                         write_nian(0,nian);                                 }                         }                 }                 if(S3==0)                 {                         delay(5);                         if(S3==0)                                                 //确认按键被按下                         {                                 while(!S3);                                 if(S1num==1)                                                                  {                                         miao--;                                          //调整秒减1                                         if(miao==-1)                          //减到00后再减重新设置为59                                                 miao=59;                                         write_sfm(6,miao);                                         write_com(0x80+0x40+6);                                 }                                 if(S1num==2)                                 {                                         fen--;                                           //调整分减1                                         if(fen==-1)                                                 fen=59;                                         write_sfm(3,fen);                                         write_com(0x80+0x40+3);                                 }                                 if(S1num==3)                                 {                                         shi--;                                                //调整时减1                                         if(shi==-1)                                                 shi=23;                                         write_sfm(0,shi);                                         write_com(0x80+0x40);                                 }                                 if(S1num==4)                                 {                                         xqnum--;                                        //调整星期减一                                         if(xqnum==-1)                                                 xqnum=6;                                         write_com(0x80+0x0b);                                         for(a=0;a<3;a++)                                         {                                                 write_data(xingqi[xqnum][a]);                                                 delay(5);                                         }                                 }                                 if(S1num==5)                                   //调整日                                 {                                         ri--;                                                                                         if(yue==2)                                         {                                                 if(nian%400==0)                                                 {                                                         if(ri==0)                                                         {                                                                 ri=29;                                                         }                                                 }                                                 if(nian%400!=0)                                                 {                                                         if(ri==0)                                                         {                                                                 ri=28;                                                         }                                                 }                                         }                                         else if(yue==4|6|9|11)                                                                           {                                                                 if(yue%2==0&yue!=2)                                                 {                                                         if(ri==0)                                                         {                                                                 ri=30;                                                         }                                                 }                                                 else if(yue%2!=0&yue!=2)                                                 {                                                         if(ri==0)                                                         {                                                                 ri=31;                                                         }                                                 }                                         }                                         else if(yue>=8)                                         {                                                                                                                                                                  if(yue%2==0)                                                 {                                                         if(ri==0)                                                         {                                                                 ri=31;                                                         }                                                 }                                                 else if(yue%2!=0)                                                 {                                                         if(ri==0)                                                         {                                                                 ri=30;                                                         }                                                 }                                         }                                         write_yr(8,ri);                                                                                  }                                 if(S1num==6)                                           //调整月                                 {                                         yue--;                                         if(yue==0)                                                 yue=12;                                         write_yr(5,yue);                                 }                                 if(S1num==7)                                          //调整年                                 {                                         nian--;                                         if(nian==2013)                                                 nian=2018;                                         write_nian(0,nian);                                 }                         }                 }                 if(S4==0)                                                                   //退出设置、开启中断                 {                         delay(5);                         if(S4==0)                         {                                 S1num=0;                                 TR0=1;                                 write_com(0x0c);                         }                 }         } } /************************************************** 定时器0 *************************************************/ void timer0() interrupt 1                                         //定时器0中断服务程序 {         TH0=(65535-50000)/256;                                         //重装定时器初始值         TL0=(65535-50000)%256;         count++;                                                                  //中断次数累加          } /************************************************* 主函数 *************************************************/ void main() {         init();         while(1)         {                 keyscan();                  if(count==20)                                                         //20次50毫秒即一秒         {                 count=0;                 miao++;                 if(miao==60)                                                  //秒加到60时分进位                 {                         miao=0;                         fen++;                         if(fen==60)                                                  //分加到60时时进位                         {                                 fen=0;                                 shi++;                                 if(shi==24)                                                //时加到24时清0                                 {                                         shi=0;                                         xqnum++;                                         ri++;                                         if(yue==2)                                        //如果是二月                                         {                                                 if(nian%400==0)                         //闰年判断                                                 {                                                         if(ri==30)                                                         {                                                                 ri=1;                                                                 yue++;                                                                 write_yr(5,yue);                                                         }                                                 }                                                 if(nian%400!=0)                           //平年判断                                                 {                                                         if(ri==29)                                                         {                                                                 ri=1;                                                                 yue++;                                                                 write_yr(5,yue);                                                         }                                                 }                                         }                                         else if(yue<=7&yue!=2)           //一月到七月                                          {                                                 if(yue%2==0)                //偶数月(除二月)                                                 {                                                         if(ri==31)                                                                                                   {                                                                 ri=1;                                                                 yue++;                                                         }                                                 }                                                 else if(yue%2!=0)                         //奇数月                                                 {                                                         if(ri==32)                                                         {                                                                 ri=1;                                                                 yue++;                                                         }                                                 }                                                 write_yr(5,yue);                                         }                                         else if(yue>=8)                                         //八月到12月                                         {                                                 if(yue%2==0)                //偶数月(除二月)                                                 {                                                         if(ri==32)                                                                                                   {                                                                 ri=1;                                                                 yue++;                                                                 if(yue==13)                                   //如果判断月份为12月,则加一后重新定义月份为1                                                                 {                                                                         yue=1;                                                                         nian++;                                                                         write_nian(0,nian);                                                                 }                                                                 write_yr(5,yue);                                                         }                                                 }                                                 else if(yue%2!=0)                         //奇数月                                                 {                                                         if(ri==31)                                                         {                                                                 ri=1;                                                                 yue++;                                                                 write_yr(5,yue);                                                         }                                                 }                                         }                                         write_yr(8,ri);                                         if(xqnum==7)                                        //星期写入                                                 xqnum=0;                                         write_com(0x80+0x0b);                                         for(a=0;a<3;a++)                                         {                                                 write_data(xingqi[xqnum][a]);                                                 delay(5);                                         }                                 }                                 write_sfm(0,shi);                                //重新写入数据                         }                         write_sfm(3,fen);                                        //重新写入数据                 }                 write_sfm(6,miao);                                                //重新写入数据         }                                                                               //不停的检测按键是否被按下         } }
回复

使用道具 举报

ID:426834 发表于 2018-11-15 08:49 | 显示全部楼层
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar a,count,S1num,xqnum;
char yue,ri,shi,fen,miao;
int nian;

sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcden=P2^2;

sbit S1=P2^4;                                //定义键——进入设置
sbit S2=P2^5;                                //定义键——增大
sbit S3=P2^6;                                //定义键——减小
sbit S4=P2^7;                                //定义键——退出设置

uchar code table0[]="2018-10-6 FRI";
uchar code table1[]="00:00:00";
uchar code xingqi[][3]={"MON","TUE","WED","THU","FRI","SAT","SUN"};

void delay(uint z)                                                         //延时1ms的程序
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
/**************************************************
1602液晶显示器模块
sbit lcdrs=P2^5;
sbit lcdrw=P2^4;
sbit lcden=P2^3;
*************************************************/
void write_com(uchar com)                                        //液晶写指令
{
        lcdrw=0;
        lcdrs=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}

void write_data(uchar dat)                                        //液晶写数据
{
        lcdrw=0;
        lcdrs=1;
        P0=dat;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
/********************************************
年月日写入1602函数
********************************************/
void write_sfm(uchar add,uchar dat)                           //写时分秒函数
{
        uchar shi,ge;
        shi=dat/10;
        ge=dat%10;
        write_com(0x80+0x40+add);
        write_data(0x30+shi);
        write_data(0x30+ge);
}
void write_yr(uchar add,uchar dat)                           //写月日函数
{
        uchar shi,ge;
        shi=dat/10;
        ge=dat%10;
        write_com(0x80+add);
        write_data(0x30+shi);
        write_data(0x30+ge);
}
void write_nian(uchar add,uint dat)                           //写年函数
{
        uint qian,bai,shi,ge;
        qian=dat/1000;
        bai=dat%1000/100;
        shi=dat%100/10;
        ge=dat%10;
        write_com(0x80+add);
        write_data(0x30+qian);
        write_data(0x30+bai);
        write_data(0x30+shi);
        write_data(0x30+ge);
}
/***************************************************
初始化
***************************************************/
void init_lcd()                                                          //液晶初始化
{
        lcden=0;

        nian=2014;
        yue=8;
        ri=13;
        shi=0;                                                                   //初始shi、fen、miao
        fen=0;
        miao=0;

        write_com(0x38);                                           //设置16x2显示,5x7点阵,8位数据口
        write_com(0x0c);                                           //设置开显示,不显示光标
        write_com(0x06);                                           //写一个字符后地址指针加1
        write_com(0x01);                                           //显示清0,数据指针清0
}

void init()                                                                        //初始化函数
{
        init_lcd();                                                                 //液晶初始化
        write_com(0x80);                                                  //设置显示初始坐标
        for(a=0;a<14;a++)                                                   //显示年月日初始值
        {
                write_data(table0[a]);
                delay(5);
        }
        write_com(0x80+0x40);                                           //设置显示初始坐标
        for(a=0;a<8;a++)                                                        //显示时分秒初始值
        {
                write_data(table1[a]);                                       
                delay(5);
        }

        write_nian(0,nian);
        write_sfm(6,miao);                                                         //分别将shi、fen、miao送去液晶显示
        write_sfm(3,fen);
        write_sfm(0,shi);

        count=0;
        xqnum=0;
        S1num=0;                                                                         //初始化全局变量count

        TMOD=0x01;                                                                          //设置定时器0工作模式1
        TH0=(65535-50000)/256;                                                  //定时器装初始值
        TL0=(65535-50000)%256;
        EA=1;                                                                                        //开总中断
        ET0=1;                                                                                        //开定时器0中断
        TR0=1;                                                                                        //启动定时器0
}
/**************************************************
独立键盘
sbit S1=P3^0;                                //定义键——进入设置
sbit S2=P3^1;                                //定义键——增大
sbit S3=P3^2;                                //定义键——减小
sbit S4=P3^3;                                //定义键——退出设置
独立键盘已接地
*************************************************/
void keyscan()
{
        if(S1==0)
        {
                delay(5);                                        //确认定义键被按下
                if(S1==0)
                {
                        S1num++;                                //定义键S1按下次数记录
                        while(!S1);                                //释放按键确认
                        if(S1num==1)                        //S1按下一次时
                        {
                                TR0=0;                                //关闭定时器
                                write_com(0xc0+7);        //光标定位到秒位置
                                write_com(0x0f);        //光标闪烁
                        }
                        if(S1num==2)                         //S1按下两次时
                        {
                                write_com(0xc0+4);         //光标定位到分位置
                        }
                        if(S1num==3)                          //S1按下三次时
                        {
                                write_com(0xc0+1);          //光标定位到时位置
                        }
                        if(S1num==4)                          //S1按下四次时
                        {
                                write_com(0x80+13);          //光标定位到星期位置
                        }
                        if(S1num==5)                          //S1按下五次时
                        {
                                write_com(0x80+9);          //光标定位到日位置
                        }
                        if(S1num==6)                          //S1按下六次时
                        {
                                write_com(0x80+6);          //光标定位到月位置
                        }
                        if(S1num==7)                          //S1按下七次时
                        {
                                write_com(0x80+3);          //光标定位到年位置
                        }
                        if(S1num==8)                          //S1按下八次时
                        {
                                S1num=0;                          //S1记录按键次数清零
                                TR0=1;                                  //开启定时器
                                write_com(0x0c);          //取消光标闪烁
                        }
                }
        }
        if(S1num!=0)                                           //只有定义键按下后S2、S3、S4才有效
        {
                if(S2==0)
                {
                        delay(5);                                        //防抖
                        if(S2==0)                                   //确认按键被按下
                        {
                                while(!S2);                                //释放按键确认
                                if(S1num==1)                        //S1按下一次时
                                {
                                        miao++;                                //调整秒加1
                                        if(miao==60)                //满60清零
                                                miao=0;
                                        write_sfm(6,miao);                   //每调节一次送液晶显示一次
                                        write_com(0x80+0x40+6);           //显示位置重新回到调节处
                                }
                                if(S1num==2)                           //S1按下两次时
                                {
                                        fen++;                                        //调整分加1
                                        if(fen==60)
                                                fen=0;
                                        write_sfm(3,fen);
                                        write_com(0x80+0x40+3);
                                }
                                if(S1num==3)                                 //S1按下三次时
                                {
                                        shi++;                                          //调整时加1
                                        if(shi==24)
                                                shi=0;
                                        write_com(0x80+0x40);
                                        write_sfm(0,shi);
                                }
                                if(S1num==4)                                                   //星期加调整
                                {
                                        xqnum++;
                                        if(xqnum==7)
                                                xqnum=0;
                                        write_com(0x80+0x0b);
                                        for(a=0;a<3;a++)
                                        {
                                                write_data(xingqi[xqnum][a]);
                                                delay(5);
                                        }
                                }
                                if(S1num==5)                                                                //日加调整
                                {
                                        ri++;
                                        if(yue==2)
                                        {
                                                if(nian%4==0&&nian%100!=0||nian%400==0)
                                                {
                                                        if(ri==30)
                                                        {
                                                                ri=1;
                                                        }
                                                }
                                                if(nian%400!=0)
                                                {
                                                        if(ri==29)
                                                        {
                                                                ri=1;
                                                        }
                                                }
                                        }
                                        else if(yue<=7)
                                        {
                                                if(yue%2==0&yue!=2)
                                                {
                                                        if(ri==31)
                                                        {
                                                                ri=1;
                                                        }
                                                }
                                                else if(yue%2!=0&yue!=2)
                                                {
                                                        if(ri==32)
                                                        {
                                                                ri=1;
                                                        }
                                                }
                                        }
                                        else if(yue>=8)
                                        {
                                                if(yue%2==0)
                                                {
                                                        if(ri==32)
                                                        {
                                                                ri=1;
                                                        }
                                                }
                                                else if(yue%2!=0)
                                                {
                                                        if(ri==31)
                                                        {
                                                                ri=1;
                                                        }
                                                }
                                        }
                                        write_yr(8,ri);
                                }
                                if(S1num==6)                                                        //月加调整
                                {
                                        yue++;
                                        if(yue==13)
                                                yue=1;
                                        write_yr(5,yue);
                                }                                                                                 
                                if(S1num==7)                                                 //年加调整
                                {
                                        nian++;
                                        if(nian==2019)
                                                nian=2014;
                                        write_nian(0,nian);
                                }
                        }
                }
                if(S3==0)
                {
                        delay(5);
                        if(S3==0)                                                 //确认按键被按下
                        {
                                while(!S3);
                                if(S1num==1)                                 
                                {
                                        miao--;                                          //调整秒减1
                                        if(miao==-1)                          //减到00后再减重新设置为59
                                                miao=59;
                                        write_sfm(6,miao);
                                        write_com(0x80+0x40+6);
                                }
                                if(S1num==2)
                                {
                                        fen--;                                           //调整分减1
                                        if(fen==-1)
                                                fen=59;
                                        write_sfm(3,fen);
                                        write_com(0x80+0x40+3);
                                }
                                if(S1num==3)
                                {
                                        shi--;                                                //调整时减1
                                        if(shi==-1)
                                                shi=23;
                                        write_sfm(0,shi);
                                        write_com(0x80+0x40);
                                }
                                if(S1num==4)
                                {
                                        xqnum--;                                        //调整星期减一
                                        if(xqnum==-1)
                                                xqnum=6;
                                        write_com(0x80+0x0b);
                                        for(a=0;a<3;a++)
                                        {
                                                write_data(xingqi[xqnum][a]);
                                                delay(5);
                                        }
                                }
                                if(S1num==5)                                   //调整日
                                {
                                        ri--;                                                
                                        if(yue==2)
                                        {
                                                if(nian%400==0)
                                                {
                                                        if(ri==0)
                                                        {
                                                                ri=29;
                                                        }
                                                }
                                                if(nian%400!=0)
                                                {
                                                        if(ri==0)
                                                        {
                                                                ri=28;
                                                        }
                                                }
                                        }
                                        else if(yue==4|6|9|11)                                 
                                        {               
                                                if(yue%2==0&yue!=2)
                                                {
                                                        if(ri==0)
                                                        {
                                                                ri=30;
                                                        }
                                                }
                                                else if(yue%2!=0&yue!=2)
                                                {
                                                        if(ri==0)
                                                        {
                                                                ri=31;
                                                        }
                                                }
                                        }
                                        else if(yue>=8)
                                        {                                                                        
                                                                                        if(yue%2==0)
                                                {
                                                        if(ri==0)
                                                        {
                                                                ri=31;
                                                        }
                                                }
                                                else if(yue%2!=0)
                                                {
                                                        if(ri==0)
                                                        {
                                                                ri=30;
                                                        }
                                                }
                                        }
                                        write_yr(8,ri);                                                
                                }
                                if(S1num==6)                                           //调整月
                                {
                                        yue--;
                                        if(yue==0)
                                                yue=12;
                                        write_yr(5,yue);
                                }
                                if(S1num==7)                                          //调整年
                                {
                                        nian--;
                                        if(nian==2013)
                                                nian=2018;
                                        write_nian(0,nian);
                                }
                        }
                }
                if(S4==0)                                                                   //退出设置、开启中断
                {
                        delay(5);
                        if(S4==0)
                        {
                                S1num=0;
                                TR0=1;
                                write_com(0x0c);
                        }
                }
        }
}
/**************************************************
定时器0
*************************************************/
void timer0() interrupt 1                                         //定时器0中断服务程序
{
        TH0=(65535-50000)/256;                                         //重装定时器初始值
        TL0=(65535-50000)%256;
        count++;                                                                  //中断次数累加
        
}
/*************************************************
主函数
*************************************************/
void main()
{
        init();
        while(1)
        {
                keyscan();
                if(count==20)                                                         //20次50毫秒即一秒
        {
                count=0;
                miao++;
                if(miao==60)                                                  //秒加到60时分进位
                {
                        miao=0;
                        fen++;
                        if(fen==60)                                                  //分加到60时时进位
                        {
                                fen=0;
                                shi++;
                                if(shi==24)                                                //时加到24时清0
                                {
                                        shi=0;
                                        xqnum++;
                                        ri++;

                                        if(yue==2)                                        //如果是二月
                                        {
                                                if(nian%400==0)                         //闰年判断
                                                {
                                                        if(ri==30)
                                                        {
                                                                ri=1;
                                                                yue++;
                                                                write_yr(5,yue);
                                                        }
                                                }
                                                if(nian%400!=0)                           //平年判断
                                                {
                                                        if(ri==29)
                                                        {
                                                                ri=1;
                                                                yue++;
                                                                write_yr(5,yue);
                                                        }
                                                }
                                        }
                                        else if(yue<=7&yue!=2)           //一月到七月
                                        {
                                                if(yue%2==0)                //偶数月(除二月)
                                                {
                                                        if(ri==31)                                          
                                                        {
                                                                ri=1;
                                                                yue++;
                                                        }
                                                }
                                                else if(yue%2!=0)                         //奇数月
                                                {
                                                        if(ri==32)
                                                        {
                                                                ri=1;
                                                                yue++;
                                                        }
                                                }
                                                write_yr(5,yue);
                                        }
                                        else if(yue>=8)                                         //八月到12月
                                        {
                                                if(yue%2==0)                //偶数月(除二月)
                                                {
                                                        if(ri==32)                                          
                                                        {
                                                                ri=1;
                                                                yue++;
                                                                if(yue==13)                                   //如果判断月份为12月,则加一后重新定义月份为1
                                                                {
                                                                        yue=1;
                                                                        nian++;
                                                                        write_nian(0,nian);
                                                                }
                                                                write_yr(5,yue);
                                                        }
                                                }
                                                else if(yue%2!=0)                         //奇数月
                                                {
                                                        if(ri==31)
                                                        {
                                                                ri=1;
                                                                yue++;
                                                                write_yr(5,yue);
                                                        }
                                                }
                                        }
                                        write_yr(8,ri);

                                        if(xqnum==7)                                        //星期写入
                                                xqnum=0;
                                        write_com(0x80+0x0b);
                                        for(a=0;a<3;a++)
                                        {
                                                write_data(xingqi[xqnum][a]);
                                                delay(5);
                                        }
                                }
                                write_sfm(0,shi);                                //重新写入数据
                        }
                        write_sfm(3,fen);                                        //重新写入数据
                }
                write_sfm(6,miao);                                                //重新写入数据
        }                                                                               //不停的检测按键是否被按下
        }
}
回复

使用道具 举报

ID:427118 发表于 2018-11-15 15:46 | 显示全部楼层
型号对于单片机入门影响不大,但是F1便宜
回复

使用道具 举报

ID:427312 发表于 2018-11-15 20:21 | 显示全部楼层
都行,看个人基础
回复

使用道具 举报

ID:427449 发表于 2018-11-15 23:21 | 显示全部楼层
都可以的 买个便宜的开发板学一下就好的
回复

使用道具 举报

ID:427466 发表于 2018-11-16 00:05 | 显示全部楼层
其实都行,原理是相通的,学会以后看什么都简单
回复

使用道具 举报

ID:427470 发表于 2018-11-16 00:25 | 显示全部楼层
都可以
回复

使用道具 举报

ID:423453 发表于 2018-11-16 15:47 来自手机 | 显示全部楼层
其实我觉得都可以
回复

使用道具 举报

ID:427773 发表于 2018-11-16 15:51 | 显示全部楼层
建议f4    现在有了MXCUbe软件 能省不少事  新手的福音
回复

使用道具 举报

ID:427777 发表于 2018-11-16 15:54 | 显示全部楼层
关键是开始学,开始了学会一个,其他的就快了.
回复

使用道具 举报

ID:427785 发表于 2018-11-16 16:03 | 显示全部楼层
都差不多
回复

使用道具 举报

ID:427814 发表于 2018-11-16 16:55 | 显示全部楼层
都可以的,看你个人
回复

使用道具 举报

ID:86467 发表于 2018-11-16 16:57 | 显示全部楼层
F1资料最多,用的人多,百度搜索资料多。
回复

使用道具 举报

ID:427916 发表于 2018-11-16 21:24 | 显示全部楼层
都可以,看一些相关的视频教程学的比较快,原理相同。
回复

使用道具 举报

ID:427922 发表于 2018-11-16 21:24 | 显示全部楼层
我觉得还是要看想去做的目的吧,我觉得都可以
回复

使用道具 举报

ID:427916 发表于 2018-11-16 21:27 | 显示全部楼层
都可以,看一下相关的视频学的比较快,原理都是相同的。
回复

使用道具 举报

ID:428008 发表于 2018-11-17 00:52 | 显示全部楼层
我觉得,这是不问题的关键,关键是你是否静下心来深入学了
回复

使用道具 举报

ID:786452 发表于 2020-7-25 11:22 | 显示全部楼层
当然是f1了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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