/**********************************************/
/*显示函数
/**********************************************/
void display(void)
{
if(set_flag) //设置键按下,则显示设置的数值
{
dis_buf[0]=set_data[0];
dis_buf[1]=set_data[1];
dis_buf[2]=set_data[2];
}
else
{ //否则显示温度值
dis_buf[0]=bcd_buf[0];
dis_buf[1]=bcd_buf[1];
dis_buf[2]=bcd_buf[2];
}
P1 = 0xff; // 先关闭所有数码管
P1 = dis_code[dis_buf[0]]; // 小数显示代码传送到P1口
select2=1;select1=1;select0=0; // 位选
delay1ms(1); //延时1ms
P1 = dis_code[dis_buf[1]]; // 个位显示代码传送到P1口
select2=1;
select1=0;select0=1;
P17=0;
delay1ms(1); //延时1ms
P1 = dis_code[dis_buf[2]]; // 十位显示代码传送到P1口
select2=0;select1=1;select0=1;
delay1ms(1); //延时1ms
}
/**********************************************/
/*串口发送一个字符函数
/**********************************************/
void send_str(void)
{
SBUF = ad_data; //串口发送AD转换温度值
while(TI==0); // 等待数据传送
TI = 0; // 清除数据传送标志
}
/**********************************************/
/*主函数
/**********************************************/
void main(void)
{
TMOD = 0x21; // 定时器1工作于方式2,8位自动重载模式, 用于产生波特率
// 定时器0工作于方式1,产生1s的AD间隔时间
TH0=15536/256; //T0定时50ms
TL0=15536%256;
TH1 = 0xe1; // 波特率1000
TL1 = 0xe1;
SCON = 0x50; // 设定串行口工作方式1
PCON = 0x00; // 波特率不倍增
TI=0; //清除发送中断标志
www.youerw.com // 启动T1
TR0 = 1; //启动T0
while(1)
{
display();
keyscan();
if(TIMER0_flag)
{
TIMER0_flag=0;
adc();
BCD();
send_str();
}
}
}
/**********************************************/
/*T0中断服务程序
/*每秒钟ADC一次,串口发送一次
/**********************************************/
void timer0(void) interrupt 1
{
TH0=15536/256; //重装初值
TL0=15536%256;
TIMER0_NUM++;
if(TIMER0_NUM==20)
{
TIMER0_NUM=0;
TIMER0_flag=1;
}
}
时间的程序:
ORG 0000H
AJMP MAIN ;转到系统初始化程序
ORG 000BH
AJMP PITO ;转到定时器0中断服务程序
ORG 0100H
MAIN: MOV SP, #60H ;确立堆栈区
MOV TMOD, #01H ;设定定时器0为工作方式1
MOV TL0, #0DCH ;装计数器初值
MOV TH0, #0BH
CLR 21H.0
CLR TR0H ;TR0置“0”,定时关闭
SETB EAH ;EA置“1”,中断总允许
SETB ET0H ;ET0置“1”,定时器0中断
允许
MOV 30H, #10H ;循环次数
上一页 [1] [2] [3] [4] [5] [6] [7]