⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex4-8.c

📁 < 嵌入式C语言程序设计>>一书的源代码
💻 C
字号:
/*
标题:范例 4-8
版本:1.0
Target:89S51
程序描述:这个范例说明如何使用8051 的Port 1连接到四颗七段显示器,PORT 0的低4位分别控制这四颗共阳七段显示器,让四颗共阳七段显示器使用扫描的方式轮流
显示数字。
           这四颗七段显示器将显示0到 9999。 */
/* ***************************************************** */
#include <REGX51.H>
#define TIMER0_COUNT 0xFC18 /* 10000h-(12,000,000/(12*1000)) */
code 
seven_seg[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,
0X90};
code scan[4]={0X0E,0X0D,0X0B,0X07};
unsigned char counter[4]={0,0,0,0};
unsigned char i=0;
int timer0_tick;
static void timer0_isr(void) interrupt TF0_VECTOR using 1
{
  TR0=0;
  TL0=(TIMER0_COUNT & 0x00FF);
  TH0=(TIMER0_COUNT >> 8);
  TR0=1;
  P1=seven_seg[counter[i]];
  P0=scan[i];
  i++;
  if(i==4) i=0;
  timer0_tick++;
  if (timer0_tick==1000) {
      timer0_tick=0;
         counter[0]++;            // 个位数加1
         if (counter[0]==10) {    // 如果个位数等于10,则执行以下的部分
               counter[0]=0;      // 个位数变成0
               counter[1]++;      // 十位数加1
               if(counter[1]==10){ // 如果十位数等于10,则执行以下的部分
                   counter[1]=0;  // 十位数变成0
                   counter[2]++;  // 百位数加1
                   if(counter[2]==10) { // 如果百位数等于10,则执行
                                           以下的部分
                   counter[2]=0;      // 百位数变成0
                     counter[3]++;   // 千位数加1
                     if(counter[3]==10) counter[3]=0; 
                                       //如果千位数等于10,则变成0
                   }
                }
           }
  }
}
static void timer0_initialize(void)
{
  EA=0;
  timer0_tick=0;
  TR0=0;
  TMOD &= 0XF0;
  TMOD |=0x01;
  TL0=(TIMER0_COUNT & 0x00FF);
  TH0=(TIMER0_COUNT >> 8);
  PT0=0;
  ET0=1;
  TR0=1;
  EA=1;
}
void main (void)  {
  timer0_initialize();
  while (1);                        /* 无穷循环 */
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -