标题: PIC单片机计数器 [打印本页]

作者: Trump1438    时间: 2019-1-31 14:01
标题: PIC单片机计数器


  1. #include<pic.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define DIN RC0
  5. #define CS RC1
  6. #define CLK RC2
  7. uchar secs = 0;
  8. uchar minutes = 0;
  9. uchar hours = 0;
  10. unsigned char disbuf[8] = {1,2,3,4,5,6,7,8};
  11. void delay_ms(uint n)
  12. {
  13.         uchar i;
  14.         while(n--)
  15.         {
  16.                 for(i=0;i<100;i++);
  17.         }
  18. }
  19. void Port_Initial(void)
  20. {
  21.         TRISA = 0x10;
  22.         PORTA = 0x10;
  23.         TRISC = 0x00;
  24.         PORTC = 0x00;
  25. }
  26. void WriteByte(uchar dat)
  27. {
  28.         uchar i;
  29.         for(i=0;i<8;i++)
  30.         {
  31.                 DIN = ((dat<<i)&0x80)?1:0;
  32.                 CLK = 0;
  33.                 NOP();
  34.                 CLK = 1;
  35.                 NOP();
  36.         }
  37. }
  38. void MAX7221_WRITE(uchar addr,uchar dat)
  39. {
  40.         CS = 0;
  41.         WriteByte(addr);
  42.         WriteByte(dat);
  43.         CS = 1;
  44. }
  45. void MAX7221_Initial(void)
  46. {
  47.         MAX7221_WRITE(0x0A,0x07);
  48.         MAX7221_WRITE(0x0B,0x07);
  49.         MAX7221_WRITE(0x0C,0x01);
  50.         MAX7221_WRITE(0x0F,0x00);
  51.         MAX7221_WRITE(0x09,0xFF);
  52. }
  53. void Display(uchar *str)
  54. {
  55.         uchar i;
  56.         for(i=0;i<8;i++)
  57.         {
  58.                 MAX7221_WRITE(i+1,str[i]);
  59.         }
  60. }
  61. void Time0_Initial(void)
  62. {
  63.         T0CS = 1;//TOCS和T0SE配合起来实用,时T0工作在计数器状态;
  64.         PSA = 1;
  65.         T0IF = 0;
  66.         T0IE = 1;
  67.         T0SE = 1;//
  68.         GIE = 1;//开中断可以用ei()函数代替;关闭中断可以用di()函数代替;
  69.         TMR0 = 0xFF;
  70. }
  71. /*void Time0_Initial(void)//定时初始化函数;
  72. {
  73. T0CS = 0;
  74. PSA = 1;
  75. T0IF = 0;
  76. T0IE = 1;
  77. GIE = 1;
  78. TMR0 = 0x00;
  79. }*/
  80. volatile unsigned int cnt = 0;
  81. void interrupt ISR(void)
  82. {
  83.         TMR0 = 0xFF;
  84.         T0IF = 0;
  85.         //CLRWDT = 0;
  86.         cnt ++;
  87.         if(cnt==1)
  88.         {
  89.                 cnt = 0;
  90.                 secs ++;
  91.         }
  92.         if(secs==60)
  93.         {
  94.                 secs = 0;
  95.                 minutes ++;
  96.         }
  97.         if(minutes==60)
  98.         {
  99.                 minutes = 0;
  100.                 hours ++;
  101.         }
  102.         if(hours==24)
  103.         {
  104.                 hours = 0;
  105.         }
  106. }
  107. void HEXTOBCD(void)
  108. {
  109.         disbuf[0] = hours/10;
  110.         disbuf[1] = hours%10;
  111.         disbuf[2] = 10;
  112.         disbuf[3] = minutes/10;
  113.         disbuf[4] = minutes%10;
  114.         disbuf[5] = 10;
  115.         disbuf[6] = secs/10;
  116.         disbuf[7] = secs%10;
  117. }
  118. void main()
  119. {
  120.         Port_Initial();
  121.         delay_ms(10);
  122.         MAX7221_Initial();
  123.         delay_ms(10);
  124.         Time0_Initial();
  125.         delay_ms(10);
  126.         //ei();
  127.         while(1)
  128.         {
  129.                 HEXTOBCD();
  130.                 delay_ms(10);
  131.                 Display(disbuf);
  132.                 delay_ms(10);
  133.         }
  134. }
复制代码


作者: Sawardeakar    时间: 2019-2-3 00:38
不错,不错,出手不同凡响
作者: jinsheng7533967    时间: 2019-2-3 00:50
终于出案例了,后面多来看看了
作者: Trump1438    时间: 2019-2-6 05:44
谢谢你们的支持
作者: 孤立无援    时间: 2020-6-26 12:17
请问能把仿真电路中的pic16f877a换成pic18f452单片机在仿一次吗




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