📄 w79e825.c
字号:
#include <w79e825.h>
#include <intrins.h>
#define uint8 unsigned char
#define uint16 unsigned int
#define uchar unsigned char
#define uint unsigned int
uint8 led[2];
//led code 共阳极 0 1 2 3 4 5 6 7 8 9 a b c d e f 灭 高位先出 bit顺序 h,g,f,e,d,c,b,a : Q1--a.....Q8--h
uint8 code tab[17] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0x0a,0x86,0x8e,0xff};
sbit LED_CLK = P1^6; //LED串行显示时钟
sbit LED_DATA = P1^7; //LED串行显示数据
uchar tx_buff[8];
#define nop() _nop_();_nop_();_nop_();_nop_();
void Disptime(void);
void init_cpu(void);
uint8 HexBcd(uint8 h);
void Dispv(v);
void Display(void);
void Adc_test(void);
uchar key_scan(void);
void delay(unsigned char i);
void myputchar(uchar c);
void trace(uchar *str,uchar len);
void ADC_Select(ADC_C);
void ADC_EN(void);
void ADC_DIS(void);
void main(void)
{
uint i;
uchar aa;
init_cpu();
aa = 0x08;
Dispv(aa);
for(;;)
{
P0=0x00;
for(i=0;i<0xfffe;i++);
P0=0xff;
for(i=0;i<0xfffe;i++);
Adc_test();
}
}
void init_cpu(void)
{
TMOD = 0x21;
SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
TH1 = 0xfd; /* TH1: reload value for 9600 baud @ 11.0592MHz */
TL1 = 0xfd;
TR1 = 1; //T1 timer run
ES = 1; //uart interrupt enable
EA = 1; //all interrupt enable
P1 = 0xff;
}
void Dispv(v)
{
uint8 temp1;
temp1 = HexBcd(v);
led[0] = (temp1&0x0f);
led[1] = (temp1&0xf0)>>4;
Display();
}
void Display(void)
{
uint8 i,j;
uint8 temp;
temp = led[0];
temp = tab[temp];
for(j=0;j<8;j++)
{
LED_DATA = (temp&0x80);
nop();
LED_CLK = 0;
nop();
temp = temp << 1;
LED_CLK = 1;
nop();
}
temp = led[1];
temp = tab[temp]&0x7f;
for(j=0;j<8;j++)
{
LED_DATA = (temp&0x80);
nop();
LED_CLK = 0;
nop();
temp = temp << 1;
LED_CLK = 1;
nop();
}
}
uint8 HexBcd(uint8 h)
{
uint8 b;
if(h > 99) return 0x99;
b=h/10*0x10 + h%10;
return b;
}
//delay 1002*i instruction period
void delay(unsigned char i)
{
unsigned char j;
i=i*2;
for(;i>0;i--)
{
j = 246;
while(--j);
}
}
void trace(uchar *str,uchar len)
{
uint i;
for(i=0;i<len;i++)
{
myputchar(*str);
str++;
}
}
void myputchar(uchar c)
{
ES = 0;
SBUF = c;
while (TI == 0);
TI = 0;
ES = 1;
}
void Adc_test(void)
{
uchar adc_h,adc_l;
uint adc_data;
ADC_Select(0); //select channel
ADC_EN(); //enable adc
ADCCON = ADCCON | 0x08; //start adc
while(!(ADCCON & 0x10));//wait adc finish
adc_h = ADCH;
ADCCON = ADCCON & 0xF7; //DISABLE adc
adc_l = ADCCON;
adc_l = adc_l>>6;
adc_data = adc_h;
adc_data = adc_data<<2;
adc_data = adc_data | adc_l;
adc_h = adc_data*50/1024;
Dispv(adc_h);
}
uchar key_scan(void)
{
return 1;
}
void ADC_Select(ADC_C)
{
ADCCON = 0x00;
ADCCON = ADC_C;
}
void ADC_EN(void)
{
ADCCEN = 0;
}
void ADC_DIS(void)
{
ADCCEN = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -