2019年10月19日 星期六

0000 1111 ~9999 test

#include <reg51.h>
sbit  wled  = P2^0;
char code DATA_7SEG[16]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,     
                         0x88, 0x83, 0x46, 0xa1, 0x86, 0x8e};
char act[4]={0xfe, 0xfd, 0xfb, 0xf7 }; //個十百千之電晶體輪流低電位PNP導通
char data disp[4];
char di=0;//BJT基極腳--act一維陣列的索引值
int  value;
unsigned char hi, lo;
//============================================
void delay(int d)
{
int i, j;
 for(i=0; i<d; i++)
    for(j=0; j<100; j++)  ;
}
/*----------------------------*/
void led_bl()//二、一開始讓led亮2秒
{
int i;
 for(i=0; i<1; i++)
  {
   wled=0;  delay(2000);
   wled=1;  delay(2000);
  }
}
/*----------------*/
void init_buf()//一、預設千百十個顯示為0000,用回圈跑4次
{
int i;
  for(i=0; i<4; i++)    disp[i]=DATA_7SEG[0];
}
/*------------------*/
void t0isr(void) interrupt 1 using 1//計時器0中斷函數
{
  /* 2 mS ISR...scan 1 time */
  TH0=hi;//初始設定重抄一遍,計時中斷0 2ms 掃瞄一次,消除視覺暫留
  TL0=lo;
  /* 5 mS ISR...scan 1 seg */
  P0=disp[di];//計時中斷0 5ms掃瞄一次七段顯示器
  P1=act[di]; //P1 掃瞄個十百千即com0 com1 com2 com3
  di++;
  if(di==4) di=0;//週期為0123 0123
}
/*------------------*/
void init_t1()//二、初始值設定TH0 TL0
{
 value=65536-2000;//模式1 2ms初始值設定,獨立出來
 TH0=hi=value/256;
 TL0=lo=value%256;

 TMOD=0x01;//模式1打開
 IE=0x82;//Timer0中斷打開
 TR0=1;//TR0打開
}
//----------------------------------------
void show_data(char c)
{
int d;
 d=DATA_7SEG[c];//一維陣列7段顯示器=0~9
 disp[0]=d;
 disp[1]=d;
 disp[2]=d;
 disp[3]=d;
}
/*------------------*/
void test_seg()//三、測試7段顯示器
{
int i;
  for(i=0; i<10; i++) //顯示0000 1111 2222 ~ 9999
   {
    show_data(i); //顯示資料,丟0~9 
    delay(500);
   }
}
//----------------------------
main()
{
 init_buf();
 led_bl();
 init_t1();
 test_seg();
 while (1) {}
}

沒有留言:

張貼留言

algorithm

 #include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv)  { for(int j=2;j<=100;j++)//j...