完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #define uchar unsigned char #define uint unsigned int uint a,b; uint c=0; uint d=0; uint zh; uchar num; uchar code table1[]="Speed(n/min):"; ***it PWM=P0^0; ***it key1=P3^0; ***it key2=P3^1; ***it key3=P3^2; ***it key4=P3^3; ***it RS=P0^1; //RW直接接地 ***it EN=P0^2; //LCD1602控制 void de(uchar z) //延时 { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void cutiao() //粗调 { if(a==c) { PWM=0; } if(b==10) PWM=1; } void PWM_init() //PWM初始 { TMOD=0x01; EA=1; ET0=1; TR0=1; } /**************************lcd1602显示******************************/ void write_com(uchar com) //写指令到1602 { RS=0; EN=0; P2=com; de(1); EN=1; de(1); EN=0; } void write_date(uchar date) //写数据到1602 { RS=1; EN=0; P2=date; de(1); EN=1; de(1); EN=0; } void LCD_init() //初始化 { EN=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); } /**********************LCD显示****************/ void display() { write_com(0x80); for(num=0;num<13;num++) { write_date(table1[num]); de(1); } write_com(0x80+0x40); write_date(zh+0x30); de(1); } /****************************主函数**************************************/ void main() { PWM_init(); LCD_init(); while(1) { display(); !!!!!!!!!就是这里,加了显示就不运行了。但是去掉,程序就是运行的。为什么???求大神 if(b>10) //PWM范围 {a=0;b=0;} /***************键盘控制*****************************/ if(key1==0) //键盘控制,加 {de(50);//消抖 if(key1==0) { c++; if(c==9)c=9; } while(!key1); } if(key2==0) //减 { de(50); if(key2==0) { c--; } while(!key2); } if(key3==0) //停止 { d++; while(1) { PWM=0; if(key4==0) { d++; if(d>=2) break; } } } /*******************频道选择**********************/ switch(c) { case 0:cutiao();zh=0; case 1:cutiao();zh=1; case 2:cutiao();zh=2; case 3:cutiao();zh=3; case 4:cutiao();zh=4; case 5:cutiao();zh=5; case 6:cutiao();zh=6; case 7:cutiao();zh=7; case 8:cutiao();zh=8; case 9:cutiao();zh=9; } cutiao(); //粗调 } } void DS0() interrupt 1 //中断服务程序 { TH0=(65536-50)/256; TL0=(65536-50)%256; a++; b++; }
|
|
相关推荐
9个回答
|
|
自己先顶下。求大神帮忙!
|
|
|
|
你这个问题出在了这个显示函数部分,但是先跟你说一下,程序中尽量不要使用空循环来延时,使用定时器延时,因为空循环延时的时候cpu浪费了,没干事情,只有等待。现在看看你的程序,你的显示函数里面包含了延时,然后函数里面又有函数调用了延时函数,这样这个函数占用了大量的时间,等运行完这个函数才开始检测b的值(if(b>10){a=0;b=0;}),问题就出在这里,应该把这个放到定时器中断里面,因为等执行这条语句时,display占用了的时间让b和a加了很多很多次,导致很大的时候才清零,也就是说你的pwm周期很大很大,高电平时间一定,那么占空比变得非常非常小了,因此就出现了你看到的情况了
评分 |
|
|
|
|
|
|
|
哎妈呀。大神啊。 听你这么一说,思路一下子清楚不少。非常感谢。 我去试试看吧。 |
|
|
|
程序不是不运行吧
|
|
|
|
|
|
|
|
|
|
|
|
{:1:}
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11770 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 15:31 , Processed in 0.963545 second(s), Total 94, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号