数码管新车上面贴几个标志有个丝印P1标志是什么意思

求助,百位上的数码管该显示1的时候显示7怎么回事_单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:117,210贴子:
求助,百位上的数码管该显示1的时候显示7怎么回事收藏
/***********************************************************************************************************///DYP-ME007 超声波测距模块 DEMO 程序//晶振:11。0592
//接线:模块TRIG接 P0.2
ECH0 接P0.1//数码管P2.5 P2.4 P2.3接选通数码管/***********************************************************************************************************/
#include &AT89x51.H&
//器件配置文件
#include &intrins.h&
unsigned int
unsigned int
unsigned char posit=0;
unsigned long S=0;
unsigned char const discode[] ={
0X03,/*0*/
0X9F,/*1*/
0X25,/*2*/
0X0D,/*3*/
0X99,/*4*/
0X49,/*5*/
0X41,/*6*/
0X1F,/*7*/
0X01,/*8*/
0X09,/*9*//*-*/};
unsigned char const positon[3]={ 0xdf,0xbf,0x7f};
unsigned char disbuff[4]
={ 0,0,0,0,};/********************************************************/
void Display(void)
//扫描数码管 {
if(posit==0)
{P0=(discode[disbuff[posit]])&0x7f;}
{P0=discode[disbuff[posit]];}
P2=positon[posit];
if(++posit&=3)
posit=0; }/********************************************************/
void Conut(void) {
time=TH0*256+TL0;
S=(time*1.7)/100;
//算出来是CM
if((S&=700)||flag==1) //超出测量范围显示“-”
disbuff[0]=10;
disbuff[1]=10;
disbuff[2]=10;
disbuff[0]=S%;
disbuff[1]=S%;
disbuff[2]=S%;
} }/********************************************************/
void zd0() interrupt 1
//T0中断用来计数器溢出,超过测距范围
//中断溢出标志
}/********************************************************/
interrupt 3
//T1中断用来扫描数码管和计800MS启动模块
Display();
if(timer&=400)
启动一次模块
}/*********************************************************/
TMOD=0x11;
//设T0为方式1,GATE=1; TH0=0; TL0=0;
//2MS定时 TL1=0x30; ET0=1;
//允许T0中断 ET1=1;
//允许T1中断 TR1=1;
//开启定时器 EA=1;
//开启总中断
while(1) {
while(!RX);
//当RX为零时等待
//开启计数
while(RX);
//当RX为1计数并等待
//关闭计数
实邦电子多年专注于单片机产品开发,为客户提供电子产品解决方案,已成功开发100多款产品.我们拥有多位经验的电子工程师,为您的产品提供优异的设计,稳定可靠的电路设计.
数码管段码好像错了!
你写倒了吧
楼主解决了没有?我现在也是这种情况,a和b两段同亮同灭不能单独控制,用万用表测线又没接在一起
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或【图文】数码管显示控制_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
数码管显示控制
上传于||暂无简介
大小:779.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢博客访问: 1174432
博文数量: 372
博客积分: 8284
博客等级: 中将
技术积分: 4559
注册时间:
天行健,君子以自强不息
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
3年前做的一个小东西,今晚偶尔兴起,改了下程序:1、可以测量并显示负温度2、出错时错误码显示3、数码管显示多余0去掉原理图如下:PCB图如下:程序如下:/*程序功能:测量温度(DS18B20),数码管动态显示硬件平台:STC89C52(12M)软件平台: Keil 3端口分配:P1位选,P3段选,DQ=P1^4作者: & &Mr Lee修改日期:*/#include#include#define uint unsigned int#define uchar unsigned char#define uint unsigned int#define uchar unsigned char//管脚定义#define wei P1#define duan P3sbit DQ=P1^4; //数据传输线接单片机的相应的引脚//数码管段码位码定义uint ww[]={0xf7,0xfb,0xfd,0xfe,0xf7,0xfb,0xfd,0xfe,0xf7,0xfb};uchar dot[]={0x40,0x7c,0x09,0x03,0x26,0x12,0x10,0x47,0x00,0x02};//0-9共阳,带小数点char nodot[]={0xc0,0xfc,0x89,0x83,0xa6,0x92,0x90,0xc7,0x80,0x82};//0-9共阳,不带小数点char code_func[]={0x98,0xbd,0xbf};//E,r,-//定义全局变量unsigned char tempL=0; //临时变量低位unsigned char tempH=0; //临时变量高位 //温度值uchar flag_fu=0; &//温度正负值标志位/****************************************************************************函数功能:延时子程序入口参数:k出口参数:****************************************************************************/void delay_ms(uint z){ uint x,y; for(x=11;x>0;x--)
for(y=z;y>0;y--);}void delay(unsigned int k){&&n=0;&while(n < k)&{n++;}&&}&/****************************************************************************函数功能:DS18B20初始化子程序入口参数:出口参数:****************************************************************************/Init_DS18B20(void){unsigned char x=0;DQ=1; //DQ先置高delay(8); //延时DQ=0; //发送复位脉冲delay(85); //延时(>480ms)DQ=1; //拉高数据线delay(14); //等待(15~60ms)&}/****************************************************************************函数功能:向DS18B20读一字节数据入口参数:出口参数:dat****************************************************************************/ReadOneChar(void)&{unsigned char i=0;&unsigned char dat=0;for (i=8;i>0;i--)&{DQ=1;delay(1);DQ=0;&dat>>=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}/****************************************************************************函数功能:向DS18B20写一字节数据入口参数:dat出口参数:****************************************************************************/WriteOneChar(unsigned char dat){&unsigned char i=0;&for(i=8;i>0;i--)&{DQ=0;&DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(4);}/****************************************************************************函数功能:向DS18B20读温度值入口参数:出口参数:temperature****************************************************************************/float ReadTemperature(void){& int temp_ Init_DS18B20(); //初始化 WriteOneChar(0xcc); //跳过读序列号的操作 WriteOneChar(0x44); //启动温度转换 delay(125); //转换需要一点时间,延时 Init_DS18B20(); //初始化 WriteOneChar(0xcc); //跳过读序列号的操作 WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); //读出温度的低位LSB tempH=ReadOneChar(); //读出温度的高位MSB& temp_int=(tempH<<8) + tempL; //如果温度小于0 if(temp_int&0x8000) {
temp_int=~temp_
temp_int+=1;
flag_fu=1; } else {
flag_fu=0; } //温度转换,把高低位做相应的运算转化为实际温度 temperature=temp_int*0.0625;& delay(200); return(temperature);}void display(float temperature ){ int temp_ int temp_ int temp_ temperature=ReadTemperature(); //测量温度不在范围内,表示错误 if((temperature 150)) ///if(temperature==85) //if(1) {
wei=ww[3];//错误码,左至右第一个数码管
duan=code_func[0];//"E"
delay_ms(45);
wei=ww[2];//错误码,左至右第二个数码管
duan=code_func[1];//"r"
delay_ms(45);
wei=ww[1];//左至右第三个数码管
duan=code_func[1];//"r"
delay_ms(45);
wei=ww[0];//错误码数码,左至右第四个数码管(最右边)
duan=nodot[7];
delay_ms(45); } else {
//temperature-=12;
temp_shi=(int)(temperature/10);
temp_ge=((((int)temperature)%100)%10);
temp_dot=((int)(temperature*10))%10;
if(temperature>=10)
wei=ww[3];
if(flag_fu==1)
//负温度显示
duan=code_func[2];//"-"
//关闭该数码管
delay_ms(60);
wei=ww[2];//十位,左至右第二个数码管
duan=nodot[temp_shi];
delay_ms(60);
wei=ww[1];//个位,左至右第三个数码管
duan=dot[temp_ge];
delay_ms(60);
wei=ww[0];//小数位,左至右第四个数码管(最右边)
duan=nodot[temp_dot];
else//温度绝对值在10以内
wei=ww[3];
duan=0//关闭第1个数码管
delay_ms(60);
wei=ww[2];//
if(flag_fu==1)
duan=code_func[2];//"-"
delay_ms(60);
wei=ww[1];//个位,左至右第三个数码管
duan=dot[temp_ge];
delay_ms(60);
wei=ww[0];//小数位,左至右第四个数码管(最右边)
duan=nodot[temp_dot];
//delay_ms(10);
}}void main(){&&//init();&while(1)&{&
& display(i);&//delay(500);&}&}效果图如下:程序进过最后修正,做了如下修改:<font color="#、用定时器0周期扫描数码管,取代之前的延时函数,使显示十分稳定,看不到数码管在晃动。数码管的扫描显示是在定时器中断中做的。<font color="#、在主循环中偶尔读取温度传感器值并计算。<font color="#、温度测量范围在-55到100之间。(负温度部分通过打火机充气瓶对其喷气降温测试过)<font color="#、定时器扫描周期和主循环测量周期都是经过反复测试过的,现在值是最稳定的。<font color="#、定时器中断做了优化,提高效率。否则会影响显示效果。程序如下:/*程序功能:测量温度(DS18B20),数码管动态显示硬件平台:STC89C52(12M)软件平台: Keil 3端口分配:P1位选,P3段选,DQ=P1^4作者: & &Mr Lee修改日期:最后修改:*/#include#include#define uint unsigned int#define uchar unsigned char#define uint unsigned int#define uchar unsigned char#define LZ_TEMP_DEBUG
0//管脚定义#define wei P1#define duan P3sbit DQ=P1^4; //数据传输线接单片机的相应的引脚//定时器扫描数码管时间间隔:4ms#define DISTIME_DELAY
4000#define F_READ_TEMP
& &300//数码管段码位码定义char ww[]={0xf7,0xfb,0xfd,0xfe};uchar dot[]={0x40,0x7c,0x09,0x03,0x26,0x12,0x10,0x47,0x00,0x02};//0-9共阳,带小数点char nodot[]={0xc0,0xfc,0x89,0x83,0xa6,0x92,0x90,0xc7,0x80,0x82};//0-9共阳,不带小数点char code_func[]={0x98,0xbd,0xbf,0xd8};//E,r,-,C//定义全局变量(温度值相关变量)unsigned char tempL=0; //临时变量低位unsigned char tempH=0; //临时变量高位 //温度值uchar flag_fu=0; &//温度正负值标志位//数码管显示相关变量&uchar temp_&uchar temp_&uchar temp_&uchar flag_dis_temp=0;&int flag_read_temp=0;&void display(void);/****************************************************************************函数功能:延时子程序入口参数:k出口参数:****************************************************************************/void delay_ms(uint z){ uint x,y; for(x=11;x>0;x--)
for(y=z;y>0;y--);}void delay(unsigned int k){&&n=0;&while(n < k)&{n++;}&&}&/****************************************************************************函数功能:DS18B20初始化子程序入口参数:出口参数:****************************************************************************/Init_DS18B20(void){unsigned char x=0;DQ=1; //DQ先置高delay(8); //延时DQ=0; //发送复位脉冲delay(85); //延时(>480ms)DQ=1; //拉高数据线delay(14); //等待(15~60ms)&}/****************************************************************************函数功能:向DS18B20读一字节数据入口参数:出口参数:dat****************************************************************************/ReadOneChar(void)&{unsigned char i=0;&unsigned char dat=0;for (i=8;i>0;i--)&{DQ=1;delay(1);DQ=0;&dat>>=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}/****************************************************************************函数功能:向DS18B20写一字节数据入口参数:dat出口参数:****************************************************************************/WriteOneChar(unsigned char dat){&unsigned char i=0;&for(i=8;i>0;i--)&{DQ=0;&DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(4);}/****************************************************************************函数功能:向DS18B20读温度值入口参数:出口参数:temperature****************************************************************************/float ReadTemperature(void){& int temp_ Init_DS18B20(); //初始化 WriteOneChar(0xcc); //跳过读序列号的操作 WriteOneChar(0x44); //启动温度转换 delay(125); //转换需要一点时间,延时 Init_DS18B20(); //初始化 WriteOneChar(0xcc); //跳过读序列号的操作 WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); //读出温度的低位LSB tempH=ReadOneChar(); //读出温度的高位MSB& temp_int=(tempH<<8) + tempL; //如果温度小于0 if(temp_int&0x8000) {
temp_int=~temp_
temp_int+=1;
flag_fu=1; } else {
flag_fu=0; } //温度转换,把高低位做相应的运算转化为实际温度 temperature=temp_int*0.0625;& //delay(200); return(temperature);}&void dis_temp_error(void){
switch(flag_dis_temp) {
wei=ww[3];//错误码,左至右第一个数码管
duan=code_func[0];//"E"
wei=ww[2];//错误码,左至右第二个数码管
duan=code_func[1];//"r"
wei=ww[1];//左至右第三个数码管
duan=code_func[1];//"r"
wei=ww[0];//错误码数码,左至右第四个数码管(最右边)
duan=nodot[7];
} }void dis_temp_large10(void){ switch(flag_dis_temp) {
wei=ww[3];
if(flag_fu==1)
//负温度显示
duan=code_func[2];//"-"
//关闭该数码管
wei=ww[2];//十位,左至右第二个数码管
duan=nodot[temp_shi];
wei=ww[1];//个位,左至右第三个数码管
duan=dot[temp_ge];
wei=ww[0];//小数位,左至右第四个数码管(最右边)
duan=nodot[temp_dot];
} }void dis_temp_small10(){
switch(flag_dis_temp) {
wei=ww[3];
duan=0//关闭第1个数码管
wei=ww[2];//
if(flag_fu==1)
duan=code_func[2];//"-"
wei=ww[1];//个位,左至右第三个数码管
duan=dot[temp_ge];
wei=ww[0];//小数位,左至右第四个数码管(最右边)
duan=nodot[temp_dot];
}}void display(void){& //测量温度不在范围内,表示错误 if((temperature 150)) ///if(temperature==85) //if(1) {
dis_temp_error();
if(temperature>=10)
dis_temp_large10();
else//温度绝对值在10以内
dis_temp_small10();
}}void timer0_init(void){& //TMOD=0x01;//选定时器0,工作方式1,16位计数模式& TMOD|=0x01;& TH0=(65535-DISTIME_DELAY)/255;//设置初始值& TL0=(65535-DISTIME_DELAY)%255;& EA=1;//打开总中断& ET0=1;//打开定时器0中断& TR0=1;//定时器零开始计数}void main(){&unsigned char flag_calc=0;&timer0_init();&while(1)&{ if(flag_read_temp<2 ) { temperature=ReadTemperature();#if LZ_TEMP_DEBUG==1 temperature=1.3; flag_fu=1;#endif flag_calc=1; } if(flag_calc==1) {
temp_shi=(int)(temperature/10);
temp_ge=(((int)temperature))%10;
temp_dot=((int)(temperature*10))%10;
flag_calc=0;
} &}&}void timer0() interrupt 1{ TH0=0xf0; //()/255;& & & & TL0=0x5f; //()%255; //数码管显示标识量
flag_dis_temp++; //读取温度传感器标识量 flag_read_temp++; if(flag_read_temp>=F_READ_TEMP) {
flag_read_temp=0; } if(flag_dis_temp>=5)
flag_dis_temp=1; display(); }&
阅读(3856) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。请问,数码管显示亮度不够 为什么?
[问题点数:40分]
请问,数码管显示亮度不够 为什么?
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2010年1月 硬件/嵌入开发大版内专家分月排行榜第三
2010年5月 硬件/嵌入开发大版内专家分月排行榜第二
2014年7月 硬件/嵌入开发大版内专家分月排行榜第二
2013年10月 硬件/嵌入开发大版内专家分月排行榜第三2013年6月 硬件/嵌入开发大版内专家分月排行榜第三2013年3月 硬件/嵌入开发大版内专家分月排行榜第三
2013年4月 硬件/嵌入开发大版内专家分月排行榜第二2007年9月 硬件/嵌入开发大版内专家分月排行榜第二
2013年5月 硬件/嵌入开发大版内专家分月排行榜第三2012年9月 硬件/嵌入开发大版内专家分月排行榜第三2007年11月 硬件/嵌入开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。数码管显示控制_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
数码管显示控制
上传于||暂无简介
大小:808.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 数码管丝印机fs bocai 的文章

 

随机推荐