找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2188|回复: 1
打印 上一主题 下一主题
收起左侧

STM32单片机可调 电子时钟仿真实现 源程序

[复制链接]
跳转到指定楼层
楼主
主程序赋值的三个变量:“hour”、“minute”、“second”的值显示在六位数码管上
五个按键可以配合调整小时、分钟、秒数并启动或暂停电子时钟。
单片机源程序如下:
  1. #include   "lcd.h"
  2. u8 table[]="0123456789";
  3. extern  u8 hour,minute,second;
  4. void delay(u16 z)
  5. {
  6.         u16 x,y;
  7.         for(y=z;y>0;y--)
  8.         for(x=123;x>0;x--);
  9. }
  10. void lcd_wcode(u8 inst)
  11. {        
  12.         GPIO_ResetBits(GPIOB,GPIO_Pin_0);
  13.         GPIO_ResetBits(GPIOB,GPIO_Pin_1);
  14.         GPIO_Write(GPIOC,inst);
  15.         GPIO_ResetBits(GPIOB,GPIO_Pin_2);
  16.         delay(10);
  17.         GPIO_SetBits(GPIOB,GPIO_Pin_2);
  18.         delay(10);
  19.         GPIO_ResetBits(GPIOB,GPIO_Pin_2);
  20.         delay(10);
  21.         GPIO_SetBits(GPIOB,GPIO_Pin_0);
  22. }
  23. void lcd_wdata(u8 num)
  24. {
  25.         GPIO_SetBits(GPIOB,GPIO_Pin_0);
  26.         GPIO_ResetBits(GPIOB,GPIO_Pin_1);
  27.         GPIO_Write(GPIOC,num);
  28.         GPIO_ResetBits(GPIOB,GPIO_Pin_2);
  29.         delay(10);
  30.         GPIO_SetBits(GPIOB,GPIO_Pin_2);
  31.         delay(10);
  32.         GPIO_ResetBits(GPIOB,GPIO_Pin_2);
  33.         delay(10);
  34.         GPIO_SetBits(GPIOB,GPIO_Pin_0);
  35. }

  36. void LCD_Init(void)
  37. {
  38. GPIO_InitTypeDef  GPIO_InitStructure;
  39.          
  40. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);  
  41.         
  42. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;                                
  43. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //íÆíìêä3ö
  44. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO¿úËù¶èÎa50MHz
  45. GPIO_Init(GPIOC, &GPIO_InitStructure);                                         //¸ù¾Yé趨2Îêy3õê¼»ˉGPIOC
  46.                                          
  47. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;                             //PB¶Ë¿úÅäÖÃ, íÆíìêä3ö
  48. GPIO_Init(GPIOB, &GPIO_InitStructure);                                          

  49. lcd_wcode(0x38);  
  50. lcd_wcode(0x0C);
  51. lcd_wcode(0x06);
  52. lcd_wcode(0x01);
  53. }

  54. void lcd_showtime()
  55. {         
  56.           lcd_wcode(0x80+0x04);
  57.                 lcd_wdata(table[hour/10]);
  58.                  lcd_wdata(table[hour%10]);
  59.                 lcd_wdata(':');
  60.           lcd_wdata(table[minute/10]);
  61.           lcd_wdata(table[minute%10]);
  62.           lcd_wdata(':');
  63.           lcd_wdata(table[second/10]);
  64.           lcd_wdata(table[second%10]);
  65. }
复制代码
  1. #include "dsgshow.h"
  2. extern u8 hour,minute,second;
  3. u8 smgduan[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4. u16 smgwei[6]={0x8000,0x4000,0x2000,0x1000,0x0800,0x0400};

  5. void DsgShowInit()
  6. {
  7.         GPIO_InitTypeDef GPIO_InitStructure;
  8.    
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC , ENABLE);
  10.   
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|
  12.         GPIO_Pin_12|GPIO_Pin_11|GPIO_Pin_10;
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  14.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;
  15.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  16.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  17.         GPIO_Init(GPIOC, &GPIO_InitStructure);
  18. }

  19. void DsgShowTime()
  20. {
  21.         u16 j;
  22.         while(1)
  23.         {        
  24.                 GPIO_Write(GPIOA,smgwei[0]);        
  25.                 GPIO_Write(GPIOC,smgduan[hour/10]);
  26.                 for(j=0;j<400;j++);
  27.                
  28.                 GPIO_Write(GPIOA,smgwei[1]);        
  29.                 GPIO_Write(GPIOC,(smgduan[hour%10])&0xff7f);
  30.                 for(j=0;j<400;j++);
  31.                
  32.                 GPIO_Write(GPIOA,smgwei[2]);        
  33.                 GPIO_Write(GPIOC,smgduan[minute/10]);
  34.                 for(j=0;j<400;j++);
  35.                
  36.                 GPIO_Write(GPIOA,smgwei[3]);        
  37.                 GPIO_Write(GPIOC,(smgduan[minute%10])&0xff7f);
  38.                 for(j=0;j<400;j++);
  39.                
  40.                 GPIO_Write(GPIOA,smgwei[4]);        
  41.                 GPIO_Write(GPIOC,smgduan[second/10]);
  42.                 for(j=0;j<400;j++);
  43.                
  44.                 GPIO_Write(GPIOA,smgwei[5]);        
  45.                 GPIO_Write(GPIOC,smgduan[second%10]);
  46.                 for(j=0;j<400;j++);
  47.         }
  48. }
复制代码

1.jpg (431.14 KB, 下载次数: 100)

仿真运行图

仿真运行图

无法调试 求指导.7z

370.39 KB, 下载次数: 77

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:979469 发表于 2022-8-23 19:01 | 只看该作者
怎么不是用的数码管
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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