{"id":5569,"date":"2012-08-29T22:40:48","date_gmt":"2012-08-30T02:40:48","guid":{"rendered":"http:\/\/embedded-lab.com\/blog\/?p=5569"},"modified":"2013-04-25T21:22:29","modified_gmt":"2013-04-26T01:22:29","slug":"0-9999-seconds-count-down-timer-using-pic12f683-microcontroller","status":"publish","type":"post","link":"https:\/\/embedded-lab.com\/blog\/0-9999-seconds-count-down-timer-using-pic12f683-microcontroller\/","title":{"rendered":"0-9999 seconds count down timer using PIC12F683 microcontroller"},"content":{"rendered":"<p>The goal of this project is to construct a simple 0-9999 seconds count down timer with an alarm and a display. The time is set through two tact switches and the count down seconds are displayed on a 4-digit seven segment LED display. The project uses PIC12F683 microcontroller for all I\/O and timing operations and MAX7219 IC for driving the seven segment LED module. The time out condition is indicated by an audible alarm from a buzzer.<\/p>\n<div id=\"attachment_5573\" style=\"width: 575px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/TimerTitle3.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5573\" class=\"size-full wp-image-5573\" title=\"TimerTitle3\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/TimerTitle3.jpg\" alt=\"\" width=\"565\" height=\"428\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/TimerTitle3.jpg 565w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/TimerTitle3-550x416.jpg 550w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><p id=\"caption-attachment-5573\" class=\"wp-caption-text\">0-9999 seconds timer<\/p><\/div>\n<p><!--more--><strong>Circuit diagram<\/strong><\/p>\n<p>The complete circuit diagram of this project is shown below. Two tact switches (named INC and TSET) are used for setting time and turning the timer on. These switches are connected in parallel and their inputs are read through the AN3 ADC channel of PIC12F683 microcontroller. You can see from the circuit diagram how these two tact switches give rise to different analog voltages when pressed. When INC is pressed, the input voltage to AN3 pin is 0. But if TSET is pressed, the input to AN3 ADC channel would be around 2.5V (two 4.7K resistors make a voltage divider network). And if none of them are pressed the ADC input is pulled up close to 5V. Therefore, based on the value of 10-bit ADC count, it is possible to detect and identify if any of the two switches is pressed. The buzzer is driven by a PWM signal generated at the GP2 output pin of PIC12F683. The display part uses a 4-digit seven segment (common cathode type) LED module which is driven by the MAX7219 IC. If you are not familiar with MAX7219 device, please read my earlier project\u00a0<strong><a href=\"http:\/\/embedded-lab.com\/blog\/?p=4935\" target=\"_blank\">Serial four digit 7-segment LED display module<\/a><\/strong> for further detail on that.<\/p>\n<div id=\"attachment_5615\" style=\"width: 572px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/PIC12F_TimerCircuit1.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5615\" class=\"size-full wp-image-5615\" title=\"PIC12F_TimerCircuit\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/PIC12F_TimerCircuit1.jpg\" alt=\"\" width=\"562\" height=\"508\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/PIC12F_TimerCircuit1.jpg 562w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/PIC12F_TimerCircuit1-550x497.jpg 550w\" sizes=\"auto, (max-width: 562px) 100vw, 562px\" \/><\/a><p id=\"caption-attachment-5615\" class=\"wp-caption-text\">Circuit diagram for 0-9999 seconds count down timer<\/p><\/div>\n<p>The picture below shows the complete setup of the project. I am using my <strong><a href=\"http:\/\/embedded-lab.com\/blog\/?p=5469\" target=\"_blank\">PIC12F project board<\/a><\/strong> and <strong><a href=\"http:\/\/embedded-lab.com\/blog\/?p=4935\" target=\"_blank\">MAX7219 based seven segment LED display<\/a><\/strong> module for illustration. The buzzer and tact switches are wired on a breadboard but they can easily fit over the small prototyping area available on the\u00a0<strong><a href=\"http:\/\/embedded-lab.com\/blog\/?p=5469\" target=\"_blank\">PIC12F project board<\/a><\/strong>.<\/p>\n<div id=\"attachment_5575\" style=\"width: 575px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/TimerTitle4.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5575\" class=\"size-full wp-image-5575\" title=\"TimerTitle4\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/TimerTitle4.jpg\" alt=\"\" width=\"565\" height=\"430\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/TimerTitle4.jpg 565w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/TimerTitle4-550x418.jpg 550w\" sizes=\"auto, (max-width: 565px) 100vw, 565px\" \/><\/a><p id=\"caption-attachment-5575\" class=\"wp-caption-text\">ttt<\/p><\/div>\n<p><strong>Software<\/strong><\/p>\n<p>The firmware is developed in C and compiled with mikroC Pro for PIC compiler. The driver routine for MAX7219 is taken from my previous project\u00a0<strong><a href=\"http:\/\/embedded-lab.com\/blog\/?p=4935\" target=\"_blank\">Serial four digit 7-segment LED display module<\/a><\/strong>. A 5KHz PWM signal is generated at the CCP1 output pin for the audible alarm when the timer is out. The overall operation of this timer project is described in the next section. That will help you to understand how the firmware for this project works. Here&#8217;s the complete source code for this project. A download link for source and HEX files is also provided below.<\/p>\n\n<div class=\"wp_syntax\"><table><tr><td class=\"code\"><pre class=\"c\" style=\"font-family:monospace;\"><span style=\"color: #666666; font-style: italic;\">\/\/ Define Software-SPI connections for MAX7219<\/span>\n<span style=\"color: #339933;\">#define CS_Pin       GP0_bit<\/span>\n<span style=\"color: #339933;\">#define MOSI_Pin     GP1_bit<\/span>\n<span style=\"color: #339933;\">#define CLK_Pin      GP5_bit<\/span>\n&nbsp;\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> i<span style=\"color: #339933;\">,<\/span> k<span style=\"color: #339933;\">,<\/span> unit<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">,<\/span> ten<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">int<\/span> counter <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">,<\/span> hundred<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">,<\/span> thousand<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">,<\/span> l<span style=\"color: #339933;\">;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> num<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n <span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> t<span style=\"color: #339933;\">,<\/span> Mask<span style=\"color: #339933;\">,<\/span> Flag<span style=\"color: #339933;\">;<\/span>\n CLK_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n Mask <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">128<\/span><span style=\"color: #339933;\">;<\/span>\n <span style=\"color: #b1b100;\">for<\/span> <span style=\"color: #009900;\">&#40;<\/span>t<span style=\"color: #339933;\">=<\/span><span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span> t<span style=\"color: #339933;\">&lt;<\/span><span style=\"color: #0000dd;\">8<\/span><span style=\"color: #339933;\">;<\/span> t<span style=\"color: #339933;\">++<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n  Flag <span style=\"color: #339933;\">=<\/span> num <span style=\"color: #339933;\">&amp;<\/span> Mask<span style=\"color: #339933;\">;<\/span>\n  <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>Flag <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span> MOSI_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n  <span style=\"color: #b1b100;\">else<\/span> MOSI_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n  CLK_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n  CLK_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n  Mask <span style=\"color: #339933;\">=<\/span> Mask <span style=\"color: #339933;\">&gt;&gt;<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n <span style=\"color: #009900;\">&#125;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n<span style=\"color: #993333;\">void<\/span> MAX7219_INIT<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #009900;\">&#123;<\/span>\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Disable Shutdown mode<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0C<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select Shutdown register<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x01<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Set D0 bit to return to normal operation<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Set BCD decode mode for digits DIG0-DIG3<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x09<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select Decode Mode register<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0F<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select BCD mode for digits DIG0-DIG3<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n&nbsp;\n  <span style=\"color: #666666; font-style: italic;\">\/\/ Set display brighness<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0A<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select Intensity register<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0F<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Set maximum brightness<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n&nbsp;\n   <span style=\"color: #666666; font-style: italic;\">\/\/ Set display refresh<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0B<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select Scan-Limit register<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x03<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select digits DIG0-DIG3<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n&nbsp;\n <span style=\"color: #666666; font-style: italic;\">\/\/ Enable Display-Test<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0F<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select Display-Test register<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x01<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Enable Display-Test<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n&nbsp;\n  Delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1000<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n <span style=\"color: #666666; font-style: italic;\">\/\/ Disable Display-Test<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0F<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select Display-Test register<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x00<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Disable Display-Test<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n&nbsp;\n<span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n <span style=\"color: #993333;\">void<\/span> Display_Counter<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">int<\/span> j<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>                    <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>             <span style=\"color: #666666; font-style: italic;\">\/\/ Send thousands digit<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>j<span style=\"color: #339933;\">\/<\/span><span style=\"color: #0000dd;\">1000<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">%<\/span><span style=\"color:#800080;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>                    <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n&nbsp;\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>                    <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>             <span style=\"color: #666666; font-style: italic;\">\/\/ Send hundreds digit<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>j<span style=\"color: #339933;\">\/<\/span><span style=\"color: #0000dd;\">100<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">%<\/span><span style=\"color:#800080;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>                    <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n&nbsp;\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>                    <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">2<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>             <span style=\"color: #666666; font-style: italic;\">\/\/ Send tens digit<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#40;<\/span>j<span style=\"color: #339933;\">\/<\/span><span style=\"color: #0000dd;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">%<\/span><span style=\"color:#800080;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>                    <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n&nbsp;\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>                    <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>             <span style=\"color: #666666; font-style: italic;\">\/\/ Send ones digit<\/span>\n  SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span>j<span style=\"color: #339933;\">%<\/span><span style=\"color:#800080;\">10<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>                    <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n <span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n <span style=\"color: #993333;\">void<\/span> update_counter<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n   counter <span style=\"color: #339933;\">=<\/span> thousand<span style=\"color: #339933;\">*<\/span><span style=\"color: #0000dd;\">1000<\/span> <span style=\"color: #339933;\">+<\/span> hundred<span style=\"color: #339933;\">*<\/span><span style=\"color: #0000dd;\">100<\/span> <span style=\"color: #339933;\">+<\/span> ten<span style=\"color: #339933;\">*<\/span><span style=\"color: #0000dd;\">10<\/span> <span style=\"color: #339933;\">+<\/span> unit<span style=\"color: #339933;\">;<\/span>\n <span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n <span style=\"color: #993333;\">void<\/span> digit_refresh<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> n<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n   <span style=\"color: #666666; font-style: italic;\">\/\/ Set display refresh<\/span>\n   CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n   SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0B<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select Scan-Limit register<\/span>\n   SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span>n<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select digits DIG0-DIG3<\/span>\n   CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n <span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n <span style=\"color: #993333;\">void<\/span> delay_debounce<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n   Delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">300<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n <span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n <span style=\"color: #993333;\">void<\/span> blink_zeros<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n  <span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> loop<span style=\"color: #339933;\">;<\/span>\n  <span style=\"color: #b1b100;\">for<\/span> <span style=\"color: #009900;\">&#40;<\/span>loop <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span> loop <span style=\"color: #339933;\">&lt;<\/span> <span style=\"color: #0000dd;\">5<\/span><span style=\"color: #339933;\">;<\/span> loop<span style=\"color: #339933;\">++<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #009900;\">&#123;<\/span>\n    <span style=\"color: #666666; font-style: italic;\">\/\/ Enable Shutdown mode<\/span>\n    CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n    SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0C<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select Shutdown register<\/span>\n    SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x00<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Set D0 bit to return to normal operation<\/span>\n    CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n    delay_debounce<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    digit_refresh<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    <span style=\"color: #666666; font-style: italic;\">\/\/ Disable Shutdown mode<\/span>\n    CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled LOW<\/span>\n    SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x0C<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Select Shutdown register<\/span>\n    SPI_Write_Byte<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #208080;\">0x01<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>    <span style=\"color: #666666; font-style: italic;\">\/\/ Set D0 bit to return to normal operation<\/span>\n    CS_Pin <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ CS pin is pulled HIGH<\/span>\n    delay_debounce<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  <span style=\"color: #009900;\">&#125;<\/span>\n <span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n <span style=\"color: #993333;\">unsigned<\/span> <span style=\"color: #993333;\">short<\/span> time_set_mode <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">,<\/span> select_digit<span style=\"color: #339933;\">,<\/span> TMRON <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n <span style=\"color: #993333;\">void<\/span> main<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #009900;\">&#123;<\/span>\n  TRISIO<span style=\"color: #339933;\">=<\/span><span style=\"color: #208080;\">0b00011000<\/span><span style=\"color: #339933;\">;<\/span>     <span style=\"color: #666666; font-style: italic;\">\/\/ GP3, GP4 are input<\/span>\n  GPIO<span style=\"color: #339933;\">=<\/span><span style=\"color: #208080;\">0x00<\/span><span style=\"color: #339933;\">;<\/span>             <span style=\"color: #666666; font-style: italic;\">\/\/ All O\/Ps zero<\/span>\n  CMCON0 <span style=\"color: #339933;\">=<\/span> <span style=\"color: #208080;\">0x07<\/span><span style=\"color: #339933;\">;<\/span>\n  ANSEL <span style=\"color: #339933;\">=<\/span> <span style=\"color: #208080;\">0x08<\/span><span style=\"color: #339933;\">;<\/span>            <span style=\"color: #666666; font-style: italic;\">\/\/ AN3 active<\/span>\n  MAX7219_INIT<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>              <span style=\"color: #666666; font-style: italic;\">\/\/ initialize  max7219<\/span>\n  Display_Counter<span style=\"color: #009900;\">&#40;<\/span>counter<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  i <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n  PWM1_Init<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">5000<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span> <span style=\"color: #666666; font-style: italic;\">\/\/ PWM module initialization (5KHz)<\/span>\n  PWM1_Set_Duty<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">127<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n  <span style=\"color: #b1b100;\">do<\/span><span style=\"color: #009900;\">&#123;<\/span>\n&nbsp;\n   <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>ADC_Read<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">&gt;<\/span> <span style=\"color: #0000dd;\">400<\/span> <span style=\"color: #339933;\">&amp;&amp;<\/span> ADC_Read<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">&lt;<\/span> <span style=\"color: #0000dd;\">700<\/span> <span style=\"color: #339933;\">&amp;&amp;<\/span> TMRON <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n     l <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1000<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #b1b100;\">while<\/span><span style=\"color: #009900;\">&#40;<\/span>ADC_Read<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">&gt;<\/span> <span style=\"color: #0000dd;\">400<\/span> <span style=\"color: #339933;\">&amp;&amp;<\/span> ADC_Read<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">&lt;<\/span> <span style=\"color: #0000dd;\">700<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n       delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n       l<span style=\"color: #339933;\">--;<\/span>\n       <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>l <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">0<\/span> <span style=\"color: #339933;\">&amp;&amp;<\/span> counter <span style=\"color: #339933;\">&gt;<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n         TMRON <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n         PWM1_Start<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         Delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">500<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         PWM1_Stop<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n         time_set_mode <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n         <span style=\"color: #000000; font-weight: bold;\">break<\/span><span style=\"color: #339933;\">;<\/span>\n       <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n     <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #339933;\">!<\/span>TMRON<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n       digit_refresh<span style=\"color: #009900;\">&#40;<\/span>i<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n       select_digit <span style=\"color: #339933;\">=<\/span> i<span style=\"color: #339933;\">;<\/span>\n       i <span style=\"color: #339933;\">++;<\/span>\n       <span style=\"color: #b1b100;\">if<\/span> <span style=\"color: #009900;\">&#40;<\/span>i <span style=\"color: #339933;\">&gt;=<\/span><span style=\"color: #0000dd;\">4<\/span><span style=\"color: #009900;\">&#41;<\/span> i <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n       time_set_mode <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n   <span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n   <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>ADC_Read<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">3<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #339933;\">&lt;<\/span> <span style=\"color: #0000dd;\">100<\/span> <span style=\"color: #339933;\">&amp;&amp;<\/span> time_set_mode <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n     delay_debounce<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #b1b100;\">switch<\/span><span style=\"color: #009900;\">&#40;<\/span>select_digit<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n       <span style=\"color: #b1b100;\">case<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">:<\/span> unit <span style=\"color: #339933;\">++;<\/span>\n               <span style=\"color: #b1b100;\">if<\/span> <span style=\"color: #009900;\">&#40;<\/span>unit <span style=\"color: #339933;\">&gt;<\/span> <span style=\"color: #0000dd;\">9<\/span><span style=\"color: #009900;\">&#41;<\/span> unit <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n               <span style=\"color: #000000; font-weight: bold;\">break<\/span><span style=\"color: #339933;\">;<\/span>\n       <span style=\"color: #b1b100;\">case<\/span> <span style=\"color: #0000dd;\">1<\/span><span style=\"color: #339933;\">:<\/span> ten <span style=\"color: #339933;\">++;<\/span>\n               <span style=\"color: #b1b100;\">if<\/span> <span style=\"color: #009900;\">&#40;<\/span>ten <span style=\"color: #339933;\">&gt;<\/span> <span style=\"color: #0000dd;\">9<\/span><span style=\"color: #009900;\">&#41;<\/span> ten <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n               <span style=\"color: #000000; font-weight: bold;\">break<\/span><span style=\"color: #339933;\">;<\/span>\n       <span style=\"color: #b1b100;\">case<\/span> <span style=\"color: #0000dd;\">2<\/span><span style=\"color: #339933;\">:<\/span> hundred <span style=\"color: #339933;\">++;<\/span>\n               <span style=\"color: #b1b100;\">if<\/span> <span style=\"color: #009900;\">&#40;<\/span>hundred <span style=\"color: #339933;\">&gt;<\/span> <span style=\"color: #0000dd;\">9<\/span><span style=\"color: #009900;\">&#41;<\/span> hundred <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n               <span style=\"color: #000000; font-weight: bold;\">break<\/span><span style=\"color: #339933;\">;<\/span>\n       <span style=\"color: #b1b100;\">case<\/span> <span style=\"color: #0000dd;\">3<\/span><span style=\"color: #339933;\">:<\/span> thousand <span style=\"color: #339933;\">++;<\/span>\n               <span style=\"color: #b1b100;\">if<\/span> <span style=\"color: #009900;\">&#40;<\/span>thousand <span style=\"color: #339933;\">&gt;<\/span> <span style=\"color: #0000dd;\">9<\/span><span style=\"color: #009900;\">&#41;<\/span> thousand <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n               <span style=\"color: #000000; font-weight: bold;\">break<\/span><span style=\"color: #339933;\">;<\/span>\n     <span style=\"color: #009900;\">&#125;<\/span>\n   <span style=\"color: #009900;\">&#125;<\/span>\n&nbsp;\n   <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>TMRON <span style=\"color: #339933;\">&amp;&amp;<\/span> counter <span style=\"color: #339933;\">&gt;<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n    counter <span style=\"color: #339933;\">--;<\/span>\n    Display_Counter<span style=\"color: #009900;\">&#40;<\/span>counter<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    Delay_ms<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1000<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    <span style=\"color: #666666; font-style: italic;\">\/\/ Initialize all relevant variables after timer runs out<\/span>\n    <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span>counter <span style=\"color: #339933;\">==<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #009900;\">&#41;<\/span> <span style=\"color: #009900;\">&#123;<\/span>\n      TMRON <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n      unit <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n      ten <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n      hundred <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n      thousand <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n      i <span style=\"color: #339933;\">=<\/span> <span style=\"color: #0000dd;\">0<\/span><span style=\"color: #339933;\">;<\/span>\n      PWM1_Start<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n      blink_zeros<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n      PWM1_Stop<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n    <span style=\"color: #009900;\">&#125;<\/span>\n   <span style=\"color: #009900;\">&#125;<\/span>\n   <span style=\"color: #b1b100;\">if<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #339933;\">!<\/span>TMRON<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #009900;\">&#123;<\/span>\n     update_counter<span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n     Display_Counter<span style=\"color: #009900;\">&#40;<\/span>counter<span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n   <span style=\"color: #009900;\">&#125;<\/span>\n  <span style=\"color: #009900;\">&#125;<\/span><span style=\"color: #b1b100;\">while<\/span><span style=\"color: #009900;\">&#40;<\/span><span style=\"color: #0000dd;\">1<\/span><span style=\"color: #009900;\">&#41;<\/span><span style=\"color: #339933;\">;<\/span>\n<span style=\"color: #009900;\">&#125;<\/span><\/pre><\/td><\/tr><\/table><\/div>\n\n<p><a href=\"http:\/\/embedded-lab.com\/uploads\/HexFiles\/PIC12F\/9999Timer.zip\"><strong>Download source and HEX files<\/strong><\/a><\/p>\n<p>The following picture shows the configuration bit settings (4.0 MHz internal clock, MCLR, Power-Up timer, and Brown out detection are enabled) for the PIC12F683 microcontroller.<\/p>\n<div id=\"attachment_5612\" style=\"width: 576px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/PIC12FtimerConfig.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5612\" class=\"size-full wp-image-5612\" title=\"PIC12FtimerConfig\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/PIC12FtimerConfig.jpg\" alt=\"\" width=\"566\" height=\"379\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/PIC12FtimerConfig.jpg 566w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2012\/07\/PIC12FtimerConfig-550x368.jpg 550w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/a><p id=\"caption-attachment-5612\" class=\"wp-caption-text\">Configuration bit settings of PIC12F683<\/p><\/div>\n<p><strong>Operation<\/strong><\/p>\n<p>This timer operates in the following way. When the power is first turned on, the displays are initialized and you will see all four digits displaying &#8216;0&#8217;. In order to set time you need to select one digit at a time. You can do that by momentarily pressing TSET. At first press, it selects the units digit (rightmost digit), which by default is 0. All other digits will be blank at this point. You can use the INC switch to set the digit value anywhere between 0-9. With each pressing of INC, the digit value is incremented by 1, and it rolls over to 0 after 9. After setting the units digit value, pressing TSET selects tens digit. You can set the tens digit value in the similar way. Once all 4 digits are set, you can turn on the timer by holding the TSET button pressed for around 2 seconds. The timer starts with a short beep and you can see the left over seconds on the display. When the timer is out, the display flashes five times and an audible alarm is generated from the buzzer. The following video shows the timer in action.<\/p>\n<p><iframe loading=\"lazy\" src=\"http:\/\/www.youtube.com\/embed\/gxGar3DKXW0\" frameborder=\"0\" width=\"480\" height=\"360\"><\/iframe><\/p>\n<p>Note that when the timer is running, it will not respond to any inputs given through INC and TSET switches. If you want to clear or restart the timer before it is out, you should press the Reset button.<\/p>\n<p>You can buy the <strong><a href=\"http:\/\/embedded-lab.com\/blog\/?page_id=5069\" target=\"_blank\">SPI 4-digit seven segment LED display module kit<\/a><\/strong> for $11.99 including shipping within the US. This allows you to interface a 4-digit 7-segment LED display with only three I\/O pins of a microcontroller, and gives you full control of all digits and decimal points.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The goal of this project is to construct a simple 0-9999 seconds count down timer with an alarm and a display. The time is set through two tact switches and the count down seconds are displayed on a 4-digit seven segment LED display. The project uses PIC12F683 microcontroller for all I\/O and timing operations and MAX7219 IC for driving the seven segment LED module. The time out condition is indicated by an audible alarm from a buzzer.<\/p>\n","protected":false},"author":1,"featured_media":5570,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[475,439,6],"class_list":["post-5569","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pic-projects","tag-kitchen-timer","tag-max7219","tag-pic12f683"],"_links":{"self":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/5569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/comments?post=5569"}],"version-history":[{"count":18,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/5569\/revisions"}],"predecessor-version":[{"id":6076,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/5569\/revisions\/6076"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media\/5570"}],"wp:attachment":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media?parent=5569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/categories?post=5569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/tags?post=5569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}