找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8469|回复: 27
收起左侧

基于stm32的可调时钟Proteus仿真程序设计

  [复制链接]
ID:511094 发表于 2020-3-27 13:15 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
1585285941.jpg
1585285978(1).jpg
1585286000(1).jpg

proteus仿真图.zip

101.33 KB, 下载次数: 543

STM32程序.7z

187.83 KB, 下载次数: 580

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:328014 发表于 2020-3-28 03:11 | 显示全部楼层
源程序:
  1. #include "stm32f10x.h"
  2. #include "bsp-lcd1602.h"
  3. #include "delay.h"
  4. #include "sys.h"
  5. #include "adc.h"

  6. void Display_Time(void);

  7. unsigned int nian = 2019;
  8. char yue = 12;
  9. char ri = 1;
  10. char shi = 12;
  11. char fen = 30;
  12. char miao = 30;
  13. unsigned char zhou = 3;
  14. unsigned char tanble[8] = "nyrzsfm";

  15. char Times = 0;

  16. unsigned char KEY_num = 0;

  17. void Key_GPIO_Config(void)
  18. {
  19.         GPIO_InitTypeDef GPIO_InitStructure;
  20.        
  21.         /*开启按键端口(PA)的时钟*/
  22.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
  23.        
  24.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  25.        
  26.         // IO 口做输入口时,不用设置输出频率
  27.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  28.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  29.        
  30.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  31. }

  32. void KEY_Scan( void )
  33. {
  34.         if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1 )  
  35.         {         
  36.                 /*等待按键释放 */
  37.                 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1);  
  38.                 while(1)
  39.                 {
  40.                         if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1 )
  41.                         {
  42.                                 while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1);
  43.                                 KEY_num++;
  44.                                 if( KEY_num > 7 )
  45.                                 {
  46.                                         KEY_num = 0;
  47.                                         break;
  48.                                 }
  49.                         }
  50.                         if(Get_ADC(ADC_Channel_1) > 1000 )  
  51.                         {         
  52.                                 if( KEY_num == 1 )
  53.                                 {
  54.                                         nian++;
  55.                                         if( nian > 2999 )
  56.                                         {
  57.                                                 nian = 0;
  58.                                         }
  59.                                 }
  60.                                 if( KEY_num == 2 )
  61.                                 {
  62.                                         yue++;
  63.                                         if( yue > 12 )
  64.                                         {
  65.                                                 yue = 1;
  66.                                         }
  67.                                 }
  68.                                 if( KEY_num == 3 )
  69.                                 {
  70.                                         ri++;
  71.                                         if( ri > 30 )
  72.                                         {
  73.                                                 ri = 1;
  74.                                         }
  75.                                 }
  76.                                 if( KEY_num == 4 )
  77.                                 {
  78.                                         zhou++;
  79.                                         if( zhou > 7 )
  80.                                         {
  81.                                                 zhou = 0;
  82.                                         }
  83.                                 }
  84.                                 if( KEY_num == 5 )
  85.                                 {
  86.                                         shi++;
  87.                                         if( shi > 23 )
  88.                                         {
  89.                                                 shi = 0;
  90.                                         }
  91.                                 }
  92.                                 if( KEY_num == 6 )
  93.                                 {
  94.                                         fen++;
  95.                                         if( fen > 59 )
  96.                                         {
  97.                                                 fen = 0;
  98.                                         }
  99.                                 }
  100.                                 if( KEY_num == 7 )
  101.                                 {
  102.                                         miao++;
  103.                                         if( miao > 59 )
  104.                                         {
  105.                                                 miao = 0;
  106.                                         }
  107.                                 }
  108.                                 Display_Time();
  109.                         }
  110.                        
  111.                        
  112.                         if(Get_ADC(ADC_Channel_2) >1000 )  
  113.                         {         
  114.                                 if( KEY_num == 1 )
  115.                                 {
  116.                                         nian--;
  117.                                         if( nian < 2000 )
  118.                                         {
  119.                                                 nian = 2999;
  120.                                         }
  121.                                 }
  122.                                 if( KEY_num == 2 )
  123.                                 {
  124.                                         yue--;
  125.                                         if( yue <= 0 )
  126.                                         {
  127.                                                 yue = 12;
  128.                                         }
  129.                                 }
  130.                                 if( KEY_num == 3 )
  131.                                 {
  132.                                         ri--;
  133.                                         if( ri <= 0 )
  134.                                         {
  135.                                                 ri = 30;
  136.                                         }
  137.                                 }
  138.                                 if( KEY_num == 4 )
  139.                                 {
  140.                                         zhou--;
  141.                                         if( zhou <= 0 )
  142.                                         {
  143.                                                 zhou = 7;
  144.                                         }
  145.                                 }
  146.                                 if( KEY_num == 5 )
  147.                                 {
  148.                                         shi--;
  149.                                         if( shi < 0 )
  150.                                         {
  151.                                                 shi = 23;
  152.                                         }
  153.                                 }
  154.                                 if( KEY_num == 6 )
  155.                                 {
  156.                                         fen--;
  157.                                         if( fen < 0 )
  158.                                         {
  159.                                                 fen = 59;
  160.                                         }
  161.                                 }
  162.                                 if( KEY_num == 7 )
  163.                                 {
  164.                                         miao--;
  165.                                         if( miao < 0 )
  166.                                         {
  167.                                                 miao = 59;
  168.                                         }
  169.                                 }
  170.                         }
  171.                         Display_Time();
  172.                 }
  173.         }
  174. }

  175. void Display_Time( void )
  176. {
  177.         LCD1602_WriteCmd( 0x80 );
  178.         LCD1602_WriteDat( ' ' );
  179.         LCD1602_WriteDat( ' ' );
  180.         LCD1602_WriteDat( nian/1000 + 0x30 );
  181.         LCD1602_WriteDat( nian%1000/100 + 0x30 );
  182.         LCD1602_WriteDat( nian%100/10 + 0x30 );
  183.         LCD1602_WriteDat( nian%10 + 0x30 );
  184.         LCD1602_WriteDat( '-' );
  185.         LCD1602_WriteDat( yue/10 + 0x30 );
  186.         LCD1602_WriteDat( yue%10 + 0x30 );
  187.         LCD1602_WriteDat( '-' );
  188.         LCD1602_WriteDat( ri/10 + 0x30 );
  189.         LCD1602_WriteDat( ri%10 + 0x30 );
  190.         LCD1602_WriteDat( ' ' );
  191.         LCD1602_WriteDat( ' ' );
  192.         LCD1602_WriteDat( zhou + 0x30 );
  193.         LCD1602_WriteDat( ' ' );
  194.        
  195.         LCD1602_WriteCmd( 0x80 +0x40 );
  196.         LCD1602_WriteDat( ' ' );
  197.         LCD1602_WriteDat( ' ' );
  198.         LCD1602_WriteDat( ' ' );
  199.         LCD1602_WriteDat( shi/10 + 0x30 );
  200.         LCD1602_WriteDat( shi%10 + 0x30 );
  201.         LCD1602_WriteDat( ':' );
  202.         LCD1602_WriteDat( fen/10 + 0x30 );
  203.         LCD1602_WriteDat( fen%10 + 0x30 );
  204.         LCD1602_WriteDat( ':' );
  205.         LCD1602_WriteDat( miao/10 + 0x30 );
  206.         LCD1602_WriteDat( miao%10 + 0x30 );
  207.         LCD1602_WriteDat( ' ' );
  208.         LCD1602_WriteDat( ' ' );
  209.         LCD1602_WriteDat( ' ' );
  210.         LCD1602_WriteDat( ' ' );
  211.         if( KEY_num != 0 )
  212.         {
  213.                 LCD1602_WriteDat( tanble[KEY_num%10-1] );
  214.         }
  215.         else
  216.         {
  217.                 LCD1602_WriteDat( ' ' );
  218.         }
  219. }

  220. void times( void )
  221. {
  222.         miao++;
  223.         if( miao > 59 )
  224.         {
  225.                 miao = 0;
  226.                 fen++;
  227.                 if( fen > 59 )
  228.                 {
  229.                         shi++;
  230.                         if( shi > 23 )
  231.                         {
  232.                                 shi = 0;
  233.                                 ri++;
  234.                                 if( ri > 30 )
  235.                                 {
  236.                                         ri = 0;
  237.                                         yue++;
  238.                                         if( yue > 12 )
  239.                                         {
  240.                                                 yue = 0;
  241.                                                 nian++;
  242.                                                 if( nian > 2999 )
  243.                                                 {
  244.                                                         nian = 0;
  245.                                                 }
  246.                                         }
  247.                                 }
  248.                         }
  249.                        
  250.                 }
  251.         }
  252. }



  253. int main(void)
  254. {
  255.         delay_init();                     //延时函数初始化                 
  256.         LCD1602_Init();
  257.         Key_GPIO_Config();
  258.         ADC1_GPIO_Config();
  259.         ADC_Config();

  260.         while(1)
  261.         {
  262.                 KEY_Scan();
  263.                 delay_ms(500);
  264.                 times();
  265.                 Display_Time();
  266.         }
  267. }


复制代码
回复

使用道具 举报

ID:406255 发表于 2020-5-19 16:08 | 显示全部楼层
谢谢,一直在找的资料
回复

使用道具 举报

ID:767850 发表于 2020-6-3 10:21 | 显示全部楼层
问一下,如果要添加闹钟功能应该怎么做?
回复

使用道具 举报

ID:769346 发表于 2020-6-4 17:55 | 显示全部楼层
谢谢楼主;!!!
回复

使用道具 举报

ID:771237 发表于 2020-6-6 15:59 | 显示全部楼层
谢谢楼主,好人一生平安
回复

使用道具 举报

ID:771237 发表于 2020-6-6 16:01 | 显示全部楼层
谢谢楼主!!
回复

使用道具 举报

ID:516686 发表于 2020-6-8 18:01 | 显示全部楼层
proteus没有完全仿真出stm32的外部时钟树,用systick只会出一堆乱码。
回复

使用道具 举报

ID:774108 发表于 2020-6-9 16:26 来自手机 | 显示全部楼层
51hei团团 发表于 2020-3-28 03:11
源程序:

头文件没有怎么办
回复

使用道具 举报

ID:774108 发表于 2020-6-9 19:25 来自手机 | 显示全部楼层
怎么做出来
回复

使用道具 举报

ID:219315 发表于 2020-6-10 10:37 | 显示全部楼层
Proteus可以支持仿真STM32了吗,楼主用的是哪个版本啊?
回复

使用道具 举报

ID:540308 发表于 2020-6-11 16:55 | 显示全部楼层
太棒了,对我有所启发,可以多增加一个自定义的显示屏
回复

使用道具 举报

ID:774108 发表于 2020-6-12 11:46 来自手机 | 显示全部楼层
为什么我运行不成功  好多错误
回复

使用道具 举报

ID:636687 发表于 2020-6-16 13:30 | 显示全部楼层
pb口没有电平是什么情况
回复

使用道具 举报

ID:781619 发表于 2020-6-18 08:54 | 显示全部楼层
这个程序看的还行
回复

使用道具 举报

ID:781619 发表于 2020-6-18 09:25 | 显示全部楼层
PROTUS仿真就是原理图吗
回复

使用道具 举报

ID:781619 发表于 2020-6-18 09:40 | 显示全部楼层
有没有硬件图啊
回复

使用道具 举报

ID:784985 发表于 2020-6-20 14:54 | 显示全部楼层
问一下,如果要添加闹钟功能应该怎么做?
回复

使用道具 举报

ID:785166 发表于 2020-6-20 20:29 | 显示全部楼层
jach09 发表于 2020-6-10 10:37
Proteus可以支持仿真STM32了吗,楼主用的是哪个版本啊?

8.6以上版本均可
回复

使用道具 举报

ID:787359 发表于 2020-6-24 23:14 | 显示全部楼层
谢谢大佬
回复

使用道具 举报

ID:789569 发表于 2020-6-25 23:02 来自手机 | 显示全部楼层
我运行没有错误但是时间日期都不显示,哪位大佬知道怎么办?
回复

使用道具 举报

ID:739702 发表于 2020-6-27 01:02 | 显示全部楼层
谢谢大佬,挺有用的
回复

使用道具 举报

ID:582705 发表于 2020-6-27 09:34 | 显示全部楼层
感谢大佬分享
回复

使用道具 举报

ID:791107 发表于 2020-6-27 17:59 | 显示全部楼层
15532112031 发表于 2020-6-12 11:46
为什么我运行不成功  好多错误

解决了没啊,我也是好多错误
回复

使用道具 举报

ID:790610 发表于 2020-6-27 22:18 | 显示全部楼层
谢谢~~~大佬 学习
回复

使用道具 举报

ID:636687 发表于 2020-6-30 11:11 | 显示全部楼层
按钮按半天才出效果,这是哪里的问题
回复

使用道具 举报

ID:794609 发表于 2020-7-1 15:18 | 显示全部楼层
请问,你们问题解决了嘛?

回复

使用道具 举报

ID:1068392 发表于 2023-3-26 17:03 | 显示全部楼层
十年后一起潇 发表于 2020-6-25 23:02
我运行没有错误但是时间日期都不显示,哪位大佬知道怎么办?

我也想问
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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