找回密码
 立即注册

QQ登录

只需一步,快速开始

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

74hc595的单片机驱动程序

[复制链接]
跳转到指定楼层
楼主
ID:220091 发表于 2017-8-31 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
74hc595驱动数码管

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. typedef unsigned char u8;
  4. typedef unsigned int  u16;
  5. #define HIGH                1
  6. #define LOW                        0
  7. #define TH0_VALUE        0xDC
  8. #define TL0_VALUE        0x00
  9. #define CNT_VOICE_TIME 60

  10. //对芯片74hc164管脚定义
  11. sbit IO_74HC595_DATA = P1^7;
  12. sbit IO_74HC595_CLK = P1^6;
  13. sbit IO_74HC595_LATCH_CLK = P1^5;
  14. sbit IO_74HC595_DATA1 = P1^4;
  15. sbit IO_74HC595_CLK1 = P1^3;
  16. sbit IO_74HC595_LATCH_CLK1 = P1^2;
  17. sbit IO_BEEP = P1^4;

  18. //写数据到74hc595
  19. u8 code LedData[]=
  20. {
  21.         0xC0,  //"0"
  22.         0xF9,  //"1"
  23.         0xA4,  //"2"
  24.         0xB0,  //"3"
  25.         0x99,  //"4"
  26.         0x92,  //"5"
  27.         0x82,  //"6"
  28.         0xF8,  //"7"
  29.         0x80,  //"8"
  30.         0x90,  //"9"
  31. };
  32. //变量定义
  33. u8 u8SystemTime;           //全部变量前面要注明类型
  34. u8 BeepTime;
  35. u8 u8Voice_Time_Cnt;
  36. u8 Count;
  37. u8 DspBuf[2]=0;           //存储变量定义

  38. //时间变量定义
  39. u8 Second = 0;
  40. u8 Minute = 0;
  41. u8 Hour = 0;

  42. /***********************************************************
  43. 函数名称:           void DelayUs(u8 t)
  44. 函数功能:           大致延时长度如下 t*2 + 5                          
  45. 入口参数:           t
  46. 出口参数:           无
  47. 备 注:
  48. ***********************************************************/
  49. void DelayUs(u8 t)
  50. {
  51.         while(--t);
  52. }

  53. /***********************************************************
  54. 函数名称:           void DelayUs(u16 t)
  55. 函数功能:           大致延时长度如下 1ms                          
  56. 入口参数:           t
  57. 出口参数:           无
  58. 备 注:
  59. ***********************************************************/
  60. void DelayMs(u16 t)
  61. {
  62.         while(--t)
  63.         {
  64.                 DelayUs(245);
  65.                 DelayUs(245);
  66.         }
  67. }
  68. //发送数据到74hc595
  69. void HC595_SendByte(u8 Byte)
  70. {
  71.         u8 i;
  72.         for(i = 0; i < 8; i++)
  73.         {       
  74.                 IO_74HC595_DATA = Byte & 0x80;
  75.                 IO_74HC595_CLK = HIGH;
  76.                 IO_74HC595_CLK = LOW;
  77.                 Byte <<= 1;                               
  78.         }
  79. }
  80. //74hc595输出数据
  81. void HC595_OutData(void)
  82. {
  83.         IO_74HC595_LATCH_CLK = LOW;
  84.         _nop_();
  85.         _nop_();
  86.         _nop_();
  87.         IO_74HC595_LATCH_CLK = HIGH;
  88.         _nop_();
  89.         _nop_();
  90.         _nop_();
  91.         IO_74HC595_LATCH_CLK = LOW;
  92.         _nop_();
  93.         _nop_();
  94.         _nop_();
  95.                
  96. }
  97. //2222发送数据到74hc595
  98. void HC595_Send2Byte(u8 Byte)
  99. {
  100.         u8 i;
  101.         for(i = 0; i < 8; i++)
  102.         {       
  103.                 IO_74HC595_DATA1 = Byte & 0x80;                 //先送高位
  104.                 IO_74HC595_CLK1 = HIGH;
  105.                 IO_74HC595_CLK1 = LOW;
  106.                 Byte <<= 1;                               
  107.         }
  108. }
  109. //2222 74hc595输出数据
  110. void HC595_Out2Data(void)
  111. {
  112.         IO_74HC595_LATCH_CLK1 = LOW;
  113.         _nop_();
  114.         _nop_();
  115.         _nop_();
  116.         IO_74HC595_LATCH_CLK1 = HIGH;
  117.         _nop_();
  118.         _nop_();
  119.         _nop_();
  120.         IO_74HC595_LATCH_CLK1 = LOW;
  121.         _nop_();
  122.         _nop_();
  123.         _nop_();
  124.                
  125. }
  126. //刷新数码管
  127. void HC595_Refresh(void)
  128. {
  129.         HC595_SendByte(DspBuf[0]);
  130.         HC595_OutData();
  131.        
  132.         HC595_Send2Byte(DspBuf[1]);
  133.         HC595_Out2Data();       
  134. }

  135. //定时器初始化
  136. void T0_Init(void)
  137. {
  138.         TMOD |= 0x01;
  139.         TH0 = TH0_VALUE;
  140.         TL0 = TL0_VALUE;
  141.         EA  = 1;                //打开总中断
  142.         ET0 = 1;                //打开中断使能
  143.         TR0 = 1;                //开启中断
  144. }
  145. //定时器中断服务
  146. void Time0_ISR(void) interrupt 1
  147. {
  148.         TH0 = TH0_VALUE;
  149.         TL0 = TL0_VALUE;
  150.         u8SystemTime++;
  151.         if(u8SystemTime == 100)
  152.         {
  153.                 u8SystemTime = 0;
  154.                 Second++;
  155.                 if(Second == 10)
  156.                 {
  157.                         Second = 0;
  158. ……………………

  159. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
74hc595驱动.zip (39.29 KB, 下载次数: 8)


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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