34
2096
2206
荣誉版主
/* NST1001脉冲型温度传感器测试例程 本代码基于STC大学计划实验箱9.62运行 MCU型号:STC8H8K64U IRC时钟频率:11.0592MHz 编写日期:2024-05-27 */ #include "stc8h.h" #define MAIN_Fosc 11059200L sbit qian = P7^3; sbit bai = P7^2; sbit shi = P7^1; sbit ge = P7^0; sbit NST_IO = P3^4; int tmp; bit neg_flag; unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay_ms(unsigned int ms) { unsigned int i; do{ i = MAIN_Fosc / 10000; while(--i); }while(--ms); } void Timer0_Init(void) { TMOD &= 0xF0; TMOD |= 0x04; //设置定时器为外部计数模式 脉冲从T0引脚输入 } void Timer1_Isr(void) interrupt 3 { static char NST_sta; float tmp_float; switch(NST_sta) { case 0: NST_sta++; break; case 1: NST_IO = 1; NST_sta++; break; case 2: NST_sta++; break; case 3: TH0 = 0; //清空计数器 TL0 = 0; //清空计数器 TR0 = 1; NST_sta++; break; case 4: case 5: NST_sta++; break; case 6: TR0 = 0; TR1 = 0; //P3PU = 0x00; //为传感器断电 NST_IO = 0; tmp_float = ((TH0 << 8) | TL0) * 0.0625 - 50.0625; //// tmp = (int)(tmp_float * 10); if (tmp < 0) { tmp = 0-tmp; neg_flag = 1; } else { neg_flag = 0; } NST_sta = 0; break; default: NST_sta = 0; break; } } //测温定时器 void Timer1_Init(void) //10毫秒@11.0592MHz { AUXR &= 0xBF; //定时器时钟12T模式 TMOD &= 0x0F; //设置定时器模式 TL1 = 0x00; //设置定时初始值 TH1 = 0xDC; //设置定时初始值 TF1 = 0; //清除TF1标志 //TR1 = 1; //定时器1开始计时 ET1 = 1; //使能定时器1中断 } //刷数码管 void Timer4_Isr(void) interrupt 20 { static char led_sta; switch(led_sta) { case 0: //显示小数点后一位 P6=table[tmp % 10]; ge=0;shi=1;bai=1;qian=1; led_sta++; break; case 1: //显示个位 P6=table[(tmp%100)/10] & 0x7f; //加小数点 ge=1;shi=0;bai=1; led_sta++; break; case 2: //显示十位 P6=table[tmp/100]; ge=1;shi=1;bai=0; led_sta++; break; case 3: //显示负号 if(neg_flag) P6=0xbf; else P6 = 0xff; ge=1;shi=1;bai=1;qian=0; led_sta=0; break; default: led_sta=0; break; } } //刷屏定时器 void Timer4_Init(void) //1毫秒@11.0592MHz { T4T3M &= 0xDF; //定时器时钟12T模式 T4L = 0x66; //设置定时初始值 T4H = 0xFC; //设置定时初始值 T4T3M |= 0x80; //定时器4开始计时 IE2 |= 0x40; //使能定时器4中断 } void main() { EAXSFR(); //扩展寄存器访问使能 P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; P6M0 = 0x00; P6M1 = 0x00; P7M0 = 0x00; P7M1 = 0x00; P3PU = 0x10; //打开P34上拉电阻,为传感器供电 Timer0_Init(); Timer1_Init(); Timer4_Init(); EA = 1; while(1) { delay_ms(500); //测温周期 TR1 = 1; //启动测温 } }复制代码
使用道具 举报 送花
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-5-2 02:12 , Processed in 0.613252 second(s), 49 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.