2019年10月20日 星期日

先四位數 再led再四位數

#include <reg51.h>
sbit  wled  = P2^0;
char code DATA_7SEG[16]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,     
                         0xa0, 0x83, 0xa7, 0xa1, 0x84, 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;
  }
}
/*----------------*/
void init_buf()//一、預設千百十個顯示為0000,用回圈跑4次
{
int i;
  for(i=0; i<4; i++)    disp[i]=DATA_7SEG[0];
}
/*------------------*/
void t0isr(void) interrupt 1 //計時器0中斷函數 他是獨立的fcn,時間一到就進來
{
  /* 2 mS ISR...scan 1 time */
  TH0=hi;//初始設定重抄一遍,計時中斷0 2ms 掃瞄一次,消除視覺暫留
  TL0=lo;
  P0=disp[di];//2ms掃瞄一次七段顯示器
  P1=act[di]; //P1 掃瞄個十百千即com0 com1 com2 com3
  di++;
  if(di==4) di=0;//週期為com0 com1 com2 com3 0123
}
/*------------------*/
void init_t1()//二、初始值設定TH0 TL0
{//中斷2ms會去執行
 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;//一個d代表資料0~9
// disp[1]=d;
// disp[2]=d;
// disp[3]=d;
//}
///*------------------*/
void test_seg()//三、測試7段顯示器
{
 disp[0]=DATA_7SEG[0];
 disp[1]=DATA_7SEG[1];
// disp[3]=DATA_7SEG[3];
}
//----------------------------
main()
{
 init_buf();
 init_t1();
 test_seg();TR0=0;P0=0xFF;P1=0XFF;
 led_bl();TR0=1;
 while (1)
 {
  test_seg();
 }
}

沒有留言:

張貼留言

algorithm

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