完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大神你们终于来了,请帮我看下程序,学着网上做了个温度报警器,可是程序烧进去后如图显示乱码,(本来该显示温度等)
确定只是程序的问题!要强的我想靠自己解决这个问题但是在找不到哪里出错,希望大神帮看下程序,谢谢啦 //数码管段选定义 0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //断码 //数码管位选定义 uchar code smg_we[]={0x7f,0xbf,0xdf,0xef}; uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; ***it CS=P3^2; //CS定义为P3口的第2位脚,连接ADC0832CS脚 PCB ***it SCL=P3^3; //SCL定义为P3口的第3位脚,连接ADC0832SCL脚 ***it DO=P3^4; //DO定义为P3口的第4位脚,连接ADC0832DO脚 /***********************数码显示函数*****************************/ void display() { uchar i; P1 = 0xff; //消隐 P2 = smg_we[i]; //位选 P1 = dis_smg[i]; //段选 i ++; if(i >= 4) //4位数码管显示 i = 0; } /*************定时器0初始化程序***************/ void time_init() { EA = 1; //开总中断 TMOD = 0X01; //定时器0、定时器1工作方式1 ET0 = 1; //开定时器0中断 TR0 = 1; //允许定时器0定时 } /****************按键处理数码管显示函数***************/ void key_with() { if(key_can == 4) //紧急报警键 手动报警 { if(menu_1 == 0) shoudong = 1; } if(key_can == 1) //设置键 { menu_1 ++; if(menu_1 >= 3) { menu_1 = 0; } } if(menu_1 == 0) { if((key_can == 2) || (key_can == 3)) shoudong = 0; //取消手动报警 } if(menu_1 == 1) //设置高温报警 { if(key_can == 2) { s_temp ++ ; //高温报警值加1 if(s_temp > 99) s_temp = 99; } if(key_can == 3) { s_temp -- ; //高温报警值减1 if(s_temp <= 10) s_temp = 10 ; } dis_smg[0] = smg_du[s_temp % 10]; //取个位显示 dis_smg[1] = smg_du[s_temp / 10 % 10]; //取十位显示 dis_smg[2] = 0xbf; dis_smg[3] = smg_du[10]; //显示A write_eeprom(); //保存数据 } if(menu_1 == 2) //设置烟物报警 { if(key_can == 2) { s_dengji ++ ; //烟物报警值加1 if(s_dengji >= 9) s_dengji = 9; } if(key_can == 3) { s_dengji --; //烟物报警值减1 if(s_dengji <= 1) s_dengji = 1; } dis_smg[0] = smg_du[s_dengji % 10]; //取个位显示 dis_smg[1] = 0xbf ; dis_smg[2] = 0xbf; dis_smg[3] = smg_du[11]; //显示B write_eeprom(); //保存数据 } } /***************主函数*****************/ void main() { beep = 0; //开机蜂鸣器叫一声 delay_1ms(200); P0 = P1 = P2 = P3 = 0xff; //初始化IO口为高电平 temperature = read_temp(); //读取温度值 init_eeprom(); //开始初始化保存的数据 delay_1ms(650); temperature = read_temp(); //读取温度值 time_init(); //初始化定时器 while(1) { key(); //独立按键程序 if(key_can < 10) { key_with(); //按键按下要执行的程序 } if(flag_300ms == 1) { flag_300ms = 0; clock_h_l(); temperature = read_temp(); //读取温度值 dengji = ad0832read(1,0); dengji = dengji * 10 / 250; if(menu_1 == 0) { if(temperature >= 99) temperature = 99; dis_smg[3]=smg_du[dengji]; //显示烟物报警等级 dis_smg[2]= 0xbf; // - dis_smg[1]=smg_du[temperature/10%10]; //十位 dis_smg[0]=smg_du[temperature%10]; //个位 ADC0832为8位ADC,数值为0~255,我们将其分开放入l_tmpdate数组中显示 } } delay_1ms(1); } } /*************定时器0中断服务程序***************/ void time0_int() interrupt 1 { static uchar value; TH0 = 0xf8; TL0 = 0x30; // 2ms value ++; display(); //数码管显示函数 if(value % 150 == 0) { flag_300ms = 1; //300ms value = 0; } }
|
|
相关推荐
1个回答
|
|
数码管是公阴还是公阳的啊,
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1980 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1836 浏览 3 评论
4416 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1985 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2489 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 17:14 , Processed in 0.681502 second(s), Total 72, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191