109
1897
5204
论坛元老
20231227-STC8H1K17T测试之二.mp4
2023-12-27 08:09 上传
点击文件名下载附件
26.71 MB, 下载次数: 105
使用道具 举报 送花
#include "STC8H.h" #include <intrins.h> #include <stdio.h> #include "config.h" #include "delay.h" //#include "key.h" #include "WS2812.h" #include "IRC.h" #include "TM1637.h" bit fBusy; //串口发送忙标志 u8 bStage; //用户自定义命令检测阶段 #define CPUIDBASE 0xfde0 #define ID_ADDR ((unsigned char volatile xdata *)(CPUIDBASE + 0x00)) #define ADCTIM (*(unsigned char volatile xdata *)0xfea8) uint cp; u8 ADCval; //ADC测量结果 /******************************************************************************* *******************************************************************************/ void UartInit();//串口、定时器初始化 void Timer0_Init(void); //100微秒+16位自动装载+12T模式@24.000MHz void CheckCustomCmd(u8 dat);//自动下载检测 void main() { uchar i=1,d; //以下初始化 fBusy = 0; delay_us(1); delay_ms(1500);//等待稳定 UartInit();//串口、定时器初始化 while(1) { if(cp>5000) { LED=!LED; cp=0; TM1637_display(ADCval/16,ADCval%16,21 ,21, 0); // 按顺序显示 printf("ADC:0x%x\r\n",(u16)ADCval); } } } void UartInit()//串口及定时器初始化 { P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P5M0 = 0x10; P5M1 = 0x00; //以下设置内部IRC频率 P_SW2 |= 0x80; //使能访问XFR SetIRC();//手动设置内部IRC频率 //以下设置定时器0 Timer0_Init() ; //100微秒@24.000MHz #if defined BRT_T1 AUXR = 0x40; //使用定时器1作为串口波特率发生器 TMOD = 0x00; TL1 = BAUD; TH1 = BAUD >> 8; TR1 = 1; #elif defined BRT_T2 T2L = BAUD; //使用定时器2作为串口波特率发生器 T2H = BAUD >> 8; AUXR = 0x15; #else #error "Baudrate generator select error !" #endif SCON = 0x50; ES = 1; EA=1;// P3M0 = 0x00; P3M1 = 0x08; //设置P33为ADC输入口 P_SW2 |= 0x80; ADCTIM = 0x3f; //设置ADC内部时序 P_SW2 &= 0x7f; ADCCFG = 0x0f; //设置ADC时钟为系统时钟/2/16 ADC_CONTR = 0x8B; //开启ADC电源,选择第11通道ADC EADC = 1; //使能ADC中断 // EA = 1; ADC_CONTR |= 0x40; //启动AD转换 } void CheckCustomCmd(u8 dat) //检测命令序列:"@STCISP#" { switch (bStage++) { default: L_Check1st: case 0: //检测命令头 bStage = (dat == '@'); break; case 1: if (dat != 'S') goto L_Check1st; break; case 2: if (dat != 'T') goto L_Check1st; break; case 3: if (dat != 'C') goto L_Check1st; break; case 4: if (dat != 'I') goto L_Check1st; break; case 5: if (dat != 'S') goto L_Check1st; break; case 6: if (dat != 'P') goto L_Check1st; break; case 7: if (dat != '#') goto L_Check1st; delay_ms(10); //检测到正确的命令序列后复位到系统区,此处的延时可省去 IAP_CONTR = 0x60; //复位到系统区 break; } } char putchar(char dat) //重定义putchar系统函数 { while (fBusy); fBusy = 1; SBUF = dat; return dat; } void uart_isr() interrupt 4 { if (TI) { TI = 0; fBusy = 0; } if (RI) { RI = 0; CheckCustomCmd(SBUF); //检测命令序列 } } void Timer0_Isr(void) interrupt 1 { cp++; } void Timer0_Init(void) //100微秒+16位自动装载+12T模式@24.000MHz { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0x38; //设置定时初始值 TH0 = 0xFF; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器 } void ADC_Isr() interrupt 5 { ADC_CONTR &= ~0x20; //清中断标志 ADCval = ADC_RES; //读取ADC结果 ADC_CONTR |= 0x40; //继续AD转换 } 复制代码
0
3
438
中级会员
ljm1*** 发表于 2025-1-5 13:27 tm1637的驱动程序能贴出来借鉴一下吗
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-5-2 08:14 , Processed in 0.470398 second(s), 70 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.