|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
// #define HH 1
// #define LL 0
#define HH 0 //HH用在位,代表使用此位。 用在段,代表此段不亮——共阳
#define LL 1
// KeilC51_901\C51\hlp Predefined Macros
#ifdef __C51__
#include <reg51.h>
sfr AUXR=0x8E;
sbit Wei1=P2^6; // 6 P1^4
sbit Wei2=P2^0; // 8
sbit Wei3=P2^1; // 9
sbit Wei4=P2^4; // 12
sbit Dun1=P2^3; // 11 a
sbit Dun2=P3^7; // 7 b
sbit Dun3=P1^2; // 4 c
sbit Dun4=P1^0; // 2 d
sbit Dun5=P2^7; // 1 e
sbit Dun6=P2^2; // 10 f
sbit Dun7=P1^3; // 5 g
sbit Dun8=P1^1; // 3 dp
#define INTERRUPT interrupt
#else
#include "8052.h"
__sfr __at 0x8E AUXR;
#define Wei1 P2_6
#define Wei2 P2_0
#define Wei3 P2_1
#define Wei4 P2_4
#define Dun1 P2_3
#define Dun2 P3_7
#define Dun3 P1_2
#define Dun4 P1_0
#define Dun5 P2_7
#define Dun6 P2_2
#define Dun7 P1_3
#define Dun8 P1_1
#define INTERRUPT __interrupt
#endif
#define _nop_() __asm NOP __endasm
#define uint_8 unsigned char
#define uint_16 unsigned int
#define FOSC 22118400L
#define T1MS (65536-FOSC/1000) //1T模式
//#define T1MS (65536-FOSC/12/1000) //12T模式
uint_8 len = 8;
uint_16 x=0, y=0;
void delay_ms(uint_16 ms);
void dis(uint_8 wei, uint_8 n, uint_8 dp){
switch(wei){
case 1: Wei1=HH; Wei2=LL; Wei3=LL; Wei4=LL; break; //
case 2: Wei1=LL; Wei2=HH; Wei3=LL; Wei4=LL; break;
case 3: Wei1=LL; Wei2=LL; Wei3=HH; Wei4=LL; break;
case 4: Wei1=LL; Wei2=LL; Wei3=LL; Wei4=HH; break;
}
switch(n){ //a b c d e f g dp
case '0':
case 0: Dun1=LL; Dun2=LL; Dun3=LL; Dun4=LL; Dun5=LL; Dun6=LL; Dun7=HH; Dun8=(dp==1?LL:HH); break;
case '1':
case 1: Dun1=HH; Dun2=LL; Dun3=LL; Dun4=HH; Dun5=HH; Dun6=HH; Dun7=HH; Dun8=(dp==1?LL:HH); break;
case '2':
case 2: Dun1=LL; Dun2=LL; Dun3=HH; Dun4=LL; Dun5=LL; Dun6=HH; Dun7=LL; Dun8=(dp==1?LL:HH); break;
case '3':
case 3: Dun1=LL; Dun2=LL; Dun3=LL; Dun4=LL; Dun5=HH; Dun6=HH; Dun7=LL; Dun8=(dp==1?LL:HH); break;
case '4':
case 4: Dun1=HH; Dun2=LL; Dun3=LL; Dun4=HH; Dun5=HH; Dun6=LL; Dun7=LL; Dun8=(dp==1?LL:HH); break;
case '5':
case 5: Dun1=LL; Dun2=HH; Dun3=LL; Dun4=LL; Dun5=HH; Dun6=LL; Dun7=LL; Dun8=(dp==1?LL:HH); break;
case '6':
case 6: Dun1=LL; Dun2=HH; Dun3=LL; Dun4=LL; Dun5=LL; Dun6=LL; Dun7=LL; Dun8=(dp==1?LL:HH); break;
case '7':
case 7: Dun1=LL; Dun2=LL; Dun3=LL; Dun4=HH; Dun5=HH; Dun6=HH; Dun7=HH; Dun8=(dp==1?LL:HH); break;
case '8':
case 8: Dun1=LL; Dun2=LL; Dun3=LL; Dun4=LL; Dun5=LL; Dun6=LL; Dun7=LL; Dun8=(dp==1?LL:HH); break;
case '9':
case 9: Dun1=LL; Dun2=LL; Dun3=LL; Dun4=LL; Dun5=HH; Dun6=LL; Dun7=LL; Dun8=(dp==1?LL:HH); break;
case 'A':
case 10: Dun1=LL; Dun2=LL; Dun3=LL; Dun4=HH; Dun5=LL; Dun6=LL; Dun7=LL; Dun8=(dp==1?LL:HH); break; //A
case 'B':
case 11: Dun1=HH; Dun2=HH; Dun3=LL; Dun4=LL; Dun5=LL; Dun6=LL; Dun7=LL; Dun8=(dp==1?LL:HH); break; //B
case 'C':
case 12: Dun1=HH; Dun2=HH; Dun3=HH; Dun4=LL; Dun5=LL; Dun6=HH; Dun7=LL; Dun8=(dp==1?LL:HH); break; //C
case 'D':
case 13: Dun1=HH; Dun2=LL; Dun3=LL; Dun4=LL; Dun5=LL; Dun6=HH; Dun7=LL; Dun8=(dp==1?LL:HH); break; //D
case 'E':
case 14: Dun1=LL; Dun2=HH; Dun3=HH; Dun4=LL; Dun5=LL; Dun6=LL; Dun7=LL; Dun8=(dp==1?LL:HH); break; //E
case 'F':
case 15: Dun1=LL; Dun2=HH; Dun3=HH; Dun4=HH; Dun5=LL; Dun6=LL; Dun7=LL; Dun8=(dp==1?LL:HH); break; //F
}
}
void tm0() INTERRUPT 1 {
y++;
if(y>500){
y=0;
x++;
if(x==10000)x=0;
}
}
void main(){
delay_ms(100);
dis(3, 0, 0);
AUXR |= 0x80; //定时器0为1T模式
// AUXR &= 0x7f; //定时器0为12T模式
TMOD = 0x00; //设置定时器为模式0(16位自动重装载)
TL0 = T1MS&0xff; //初始化计时值
TH0 = T1MS >> 8;
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA = 1;
while (1){
//DEC
//dis(4, (x/1000)%10, 0); delay_ms(5);
//dis(3, (x/100)%10 , 1); delay_ms(5);
//dis(2, (x/10)%10 , 0); delay_ms(5);
//dis(1, x%10 , 0); delay_ms(5);
//HEX
dis(4, (x>>12)%16, 0); delay_ms(5);
dis(3, (x>>8 )%16, 1); delay_ms(5);
dis(2, (x>>4 )%16, 0); delay_ms(5);
dis(1, x %16, 0); delay_ms(5);
}
}
void delay_ms(uint_16 ms){
uint_16 i, j;
for (i = ms; i > 0; i--){
for (j = 110; j > 0; j--){
;
}
}
}
/*
测试环境:
1、Windows7 X64
2、芯片:STC15F204EA
Target model:
Name: STC15F204EA
Magic: F394
Code flash: 4.0 KB
EEPROM flash: 1.0 KB
Target frequency: 22.070 MHz
Target BSL version: 6.7R
Target options:
reset_pin_enabled=False
watchdog_por_enabled=False
watchdog_stop_idle=True
watchdog_prescale=256
low_voltage_reset=True
low_voltage_threshold=4
eeprom_lvd_inhibit=True
eeprom_erase_enabled=False
bsl_pindetect_enabled=False
3、SDCC 4.0
4、Notepad++,利用nppExec插件执行batch,一键完成编译、开启下载
5、烧写工具 stcgal (Python 3.7)。是使用DTR控制冷启动的,原来自制的CH340要修改硬件,所以暂时是手动冷启动。
stcgal -b 9600 -P stc15a -p COM5 SDCC_test1.hex
一、本程序是兼容SDCC和 KEIL的。
二、程序功能:
1、利用定时器中断,做自增;
2、并在4位数码管显示十进制、或十六进制(不规则接线的数码管)
三、可以看到SDCC 和 KEIL的区别
1、sfr、sbit、bit等寄存器级别的区别
2、中断定义词区别
3、自带头文件区别
等等。
没什么结论的测试。对于这样的小程序,编译速度看不出。同样,对这样的程序,也看不出什么结果差异。
*/
|
|