标题: 单片机驱动74hc164秒表显示的仿真和源程序 [打印本页]

作者: longgyue    时间: 2018-7-15 10:25
标题: 单片机驱动74hc164秒表显示的仿真和源程序
单片机74hc164秒表仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<iom16v.h>
  2. #include<macros.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. #define CP_L PORTC&=~BIT(0)
  6. #define CP_H PORTC|=BIT(0)

  7. #define DATA_L PORTC&=~BIT(1)
  8. #define DATA_H PORTC|=BIT(1)

  9. uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
  10.                            0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  11. uint num=0;

  12. void delay_ms()
  13. {
  14. uint i;
  15. for(i=0;i<1141;i++);
  16. }

  17. void delay(uchar time)
  18. {
  19. uint i;
  20. for(i=0;i<time;i++)
  21. delay_ms();
  22. }

  23. void send_data(uchar data)
  24. {
  25. uint i;

  26. for(i=0;i<8;i++)
  27. {
  28.    CP_L;
  29.    if(data&0x80)
  30.    DATA_H;
  31.    else
  32.    DATA_L;
  33.    CP_H;
  34.    data<<=1;
  35. }

  36. }
  37. //定时1秒
  38. void Timer1_init()
  39. {
  40. TCCR1A=0X00;
  41. TCCR1B=0X04;//256分频
  42. TCNT1H=0x85;
  43. TCNT1L=0xED;
  44. }

  45. #pragma interrupt_handler miao:9
  46. void miao()
  47. {
  48. TCNT1H=0x85;
  49. TCNT1L=0xED;
  50. if(num==60)
  51.   num=0;
  52.   num++;
  53. }

  54. void Display(uchar i,uchar j)
  55. {
  56. send_data(j);

  57. PORTC&=~BIT(i);
  58. delay(10);
  59. PORTC|=BIT(i);
  60. }


  61. void main()
  62. {
  63. DDRC=0XFF;
  64. Timer1_init();
  65. TCNT1H=0x85;
  66. TCNT1L=0xED;
  67. TIMSK|=BIT(2);
  68. SREG|=BIT(7);
  69. while(1)
  70. {
  71.   Display(2,table[num%10]);
  72.   Display(3,table[num/10]);
  73. }
  74. }
复制代码

所有资料51hei提供下载:
74hc164_miao.rar (28.65 KB, 下载次数: 23)







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1