#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uchar unsigned char
#define uint unsigned int
#define dataport P2
sbit duan=P1^1;//定义锁存使能端口 段锁存
sbit wei=P1^2;// 位锁存
sbit DQ=P3^0;
uchar temp;
unsigned char code DuanM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F
unsigned char code WeiM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
void delay(unsigned int t);
void Delay_50us(uint t);
void write_byte(uchar dat);
uchar read_byte(void);
uchar readtemperature(void);
void init_ds18b20(void);
void display(void);
main()
{
while(1)
{
temp=readtemperature();
display();
}
}
void init_dis18b20(void)
{
uchar n;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
n=DQ;
delay(4);
}
void write_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay(4);
DQ=1;
dat>>=1;
}
delay(4);
}
uchar read_byte(void)
{
uchar i,value;
for(i=0;i<8;i++)
{
DQ=0;
value>>=1;
DQ=1;
if(DQ)
value|=0x80;
delay(4);
}
return value;
}
uchar readtemperature(void)
{
uchar a,b;
init_ds18b20();
write_byte(0xcc);
write_byte(0x44);
delay(300);
init_ds18b20();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
b<<=4;
b+=(a&0xf0)>>4;
return b;
}
void display(void)
{
dataport=1;
duan=1;
duan=0;
dataport=WeiM[1];
wei=1;
wei=0;
dataport=0xff;
dataport=DuanM[temp%10];
duan=1;
duan=0;
Delay_50us(20);
wei=1;
dataport=WeiM[2];
wei=0;
dataport=0xff;
duan=1;
P2=DuanM[temp/10];
duan=0;
Delay_50us(20);
}
void delay(uint k)
{
while(k--);
}
void Delay_50us(uint t)
{
uchar j;
for( ;t>0;t--)
for(j=19;j>0;j--);
}
为什么我的51单片机数码管温度显示只显示-00000.06而且不能事实...
51单片机数码管温度显示只显示-00000.06而且不能实时显示,可能有以下几个原因:1.程序问题:程序中可能存在错误或者是不完善的设计,导致温度传感器采集的数据没有正确的进行处理显示,需要检查程序并进行调试对照采集温度数据。2.硬件问题:可能是温度传感器引脚连接的问题导致数据采集不正常,或者是数码管电...
51单片机数码管显示问题
你这段程序就是这种方式:shuma=a[d1];\/\/送第d1位数码管的段码,d1范围是0~3共4位 LED_1=0;\/\/打开d1位数码管显示允许,数码管被点亮 delay_ms(1);\/\/保持显示1ms LED_1=1;\/\/关闭d1位数码管显示,准备显示下一位
高分:51单片机汇编程序,数码管跳动问题
应该是串口收发导致单片机忙不过来,显示就会闪烁,因为你的延时程序是空操作,也占用CPU,建议你用定时中断做显示程序,中断时间定在5ms就可以了,这个定时器可以通过计数干很多其他事,比如500ms干一次。这样就不用CPU做空操作干等了。给你贴一个我写的显示程序(在定时中断中调用,这个程序显示两组数据...
51单片机数码管显示的程序是什么?
#include \/\/52系列单片机头文件\\x0d\\x0a#define uchar unsigned char \/\/宏定义\\x0d\\x0a#define uint unsigned int\\x0d\\x0asbit dula=P2^6; \/\/申明u1锁存器的锁存端\\x0d\\x0asbit wela=P2^7; \/\/ u2\\x0d\\x0auchar num1,num2;\\x0d\\x0auchar code table[...
谁能帮我看下这个程序呀,我写的51单片机,用的c语言,结果数码管就显示俩...
1,建议定义一个变量status标记当前调整的是“时”还是“分”还是秒。用一个按键控制这个变量的变化,变量的值由0变到3,再变为0。0的时候不调整,1的时候调整时,2的时候调整分,3的时候调整秒.用KEY1控制,按一下KEY1,变量status由常态0变成1,再按变成2,再按就成3,再按变回0。2,用KEY2做...
51单片机定时中断导致主程序数码管显示出问题
。2,串口发送改为中断方式,这个不细说了,网上有资料。。3,舍弃数码管扫描的软件延时,改用硬件延时(就是把数码管的位的切换也放在定时器中断里完成),保证动态扫描的及时性。这叫单片机的“前后台”编程方式,相当于将动态扫描放在了“后台”,由定时器中断来触发,不触发则不占CPU时间。
51单片机,数码管显示
电路图中很明显数码管的同一个段选都连在573同一跟线上了,然后跟你分析一下程序的思路,很简单:假如你要显示数字1,首先那P0口输出0x06(数码管应该是共阴的吧)即让b、c亮,然后你程序上让138的15脚输出低电平而7、9、10、11、12、13、14脚输出低电平,这样岂不是第一个数码管亮了,...
求一个51单片机控制的温度计显示程序
这个程序完全没问题的,我做过实验。希望对你有帮助,,,\/\/DS18B20的读写程序,数据脚P3.3 \/\/ \/\/温度传感器18B20汇编程序,采用器件默认的12位转化 \/\/ \/\/最大转化时间750微秒,显示温度-55到+125度,显示精度 \/\/ \/\/为0.1度,显示采用4位LED共阳显示测温值 \/\/ \/\/P0口为段码输入,P24...
51单片机数码管显示的问题?
不加while(1) ,CPU就会继续往下执行。继续往下执行到,没有编写程序的程序空间,出现不可意料的结果。--- 下到板子上时,旁边有两个数码管也亮了,亮度也很弱,谁能告诉我为什么这样?这就是:出现不可意料的结果。
51单片机求救 现在有一个程序是用数码管显示温度,我想当温度到达到达...
这个很简单的,你有检测温度的程序了,加一段判断温度值的程序,达到30度控制一下蜂鸣器就可以了。