完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #include #define dat_port P0 #define uchar unsigned char #define uint unsigned int #define delay4us() {_nop_();_nop_();_nop_();_nop_();} ***it RS=P2^0;//RS=1 数据 RS=0 命令 ***it RW=P2^1;//RW=1 读取 RW=0 写入 ***it E=P2^2;//E 使能信号 ***it PWM =P2^7; //PWM输出 ***it Switch=P3^7; //开关控制 ***it CLOCK=P2^6; uint dianya; uchar temp; uchar Btime01ms,BTime1ms,BTime10ms,BTime1s; uchar value=0; uchar BTime01ms; uchar statue=0; uint t; uchar dianya1[20]; int x=0; char Time01ms=0; uchar a=0;//a占空比 uchar LCD_Busy_Check();//忙检查 bit flag_KEY=0; //按键松开标志位 void Write_LCD_Command(uchar cmd);//向LCD写入命令 void Write_LCD_Data(uchar dat); //向LCD写入一个字节的数据函数 void Initialize_LCD1602(); //液晶初始化函数 void LCD_Display(uchar *str);//在LCD上显示字符串 unsigned long dat_adc0808; #define data_port P1 #define uchar unsigned char #define uint unsigned int ***it START=P2^3; ***it EOC=P2^4; ***it OE=P2^5; ***it LED=P3^0; void delay50us(uint m);// 延时 uint adc0808_init(); // AD初始化 void Refresh_show(); void delay50us(uint m) { uint n,k; for(n=m;n>0;n--) for(k=25;k>0;k--); } uint adc0808_data() // AD数据采集 { START=0; OE=0; START=1; START=0; while(EOC==0); OE=1; dat_adc0808=P1; OE=0; return dat_adc0808; } void Refresh_show() //刷新显示 { t=dat_adc0808; // 4个功率等级 if(statue==0) //默认是自动检测 { if(t < 60) { a=10; dianya=7; value=0; //全功率 } else if(t < 120) { a=7; dianya=4; value=1; //半功率 } else if(t < 180) { a=5; dianya=3; //电压值 value=2; // } else { a=3; dianya=1; value=3; // } Write_LCD_Command(0xC0); if((t/100)==0) Write_LCD_Data(' '); else Write_LCD_Data(t/100+'0'); Write_LCD_Data(t%100/10+'0'); Write_LCD_Data(t%10+'0'); Write_LCD_Data(' '); Write_LCD_Data('L'); Write_LCD_Data('X'); } } //---------------忙检查-------------------// uchar LCD_Busy_Check() { uchar LCD_Status; RS = 0; RW = 1; E = 1; delay4us(); LCD_Status = P0; E = 0; return LCD_Status; } //--------------向LCD写入命令--------------------// void Write_LCD_Command(uchar cmd) { while((LCD_Busy_Check()& 0x80)==0x80); //忙等待 RS = 0; RW = 0; E = 0; P0 = cmd; delay4us(); E = 1; delay4us(); E = 0; } //-----------向LCD写入一个字节的数据函数-----------------*/ void Write_LCD_Data(uchar dat) { while((LCD_Busy_Check()&0x80)==0x80); RS = 1; RW = 0; E = 0; P0 = dat; delay4us(); E = 1; delay4us(); E = 0; } //-----------LCD初始化-----------------*/ void Initialize_LCD1602() //液晶初始化函数 { Write_LCD_Command(0x38);delay50us(10); //功能设置,数据长度为8位,双行显示,5×7点阵字体 Write_LCD_Command(0x0C);delay50us(10); // 显示开,关光标 Write_LCD_Command(0x06);delay50us(10); //字符进入模式:屏幕不动,字符后移 Write_LCD_Command(0x01);delay50us(10);//清屏 } //-----------在LCD上显示字符串-----------------*/ void LCD_Display(uchar *str) { uchar i; for(i=0;i { Write_LCD_Data(str); delay50us(100); } } //初始化串行口 void csh() { SM0=0; SM1=1; //方式2,8位自动重装的8位定时器/计数器 REN=1; TI=1; RI=0; PCON=0; TH1=0xFD; TL1=0XFD; // 9600 TMOD=0X20; ////定时器0工作模式2,自动重装8位计数器 EA=1; ET1=0; //51单片机的定时器1允许中断 ES=1; TR1=1; } /*------------------------------------- 按键扫描 ---------------------------------------*/ void keyscan() { if(Switch==0)// { if(flag_KEY==1)//按键只响应1次 { flag_KEY=0; statue++; if(statue==3) statue=0; //按键复位 } } if(Switch) { flag_KEY=1; } } /*------------------------------------------------ 定时器0初始化 ------------------------------------------------*/ void TIM0init(void)//定时器0初始化 { TMOD=0x01;//定时器0工作方式1 TH0=0xFF; TL0=0xB2; //0.1ms初值 ET0=1; //开中断 TR0=1; EA=1; //开总中断 } void main() { TIM0init(); Initialize_LCD1602(); //lcd初始化 csh(); //串口初始化 TMOD=0x21;//定时器0工作方式1 while(1) { keyscan(); adc0808_data(); //ad转换数据 Refresh_show(); Write_LCD_Command(0xC8); Write_LCD_Data(value+'0'); Write_LCD_Data(' '); Write_LCD_Data((dianya)/100+'0'); Write_LCD_Data((dianya)%100/10+'0'); Write_LCD_Data((dianya)%10+'0'); Write_LCD_Data('M'); Write_LCD_Data('A'); dianya1[0]=(dianya)/100+0x30; dianya1[1]=(dianya)%100/10+0x30; dianya1[2]=(dianya)%10+0x30; dianya1[3]=' '; TI=0; SBUF=(dianya1[x]); while(!TI); TI=0; x++; if(x>=5) //重新发送数据 x=0; if(statue==2) { BTime01ms++; if(BTime01ms>=4) { BTime01ms=0; BTime1ms++; if(BTime1ms>=4) { BTime1ms=0; BTime10ms++; if(BTime10ms>=4) { BTime10ms=0; BTime1s++; if(BTime1s<=3) { a=10; dianya=7; value=0; //全功率 } else if(BTime1s<=5) { value=1; //半功率 a=7; dianya=4; } else if(BTime1s<=7) { value=2; // a=5; dianya=3; } else { value=3; // a=3; dianya=1; BTime1s=0; } } } } } else //清零 { BTime01ms=0; BTime1ms=0; BTime10ms=0; BTime1s=0; } } } void Timer0_INT() interrupt 1 //输出PWM { CLOCK=!CLOCK; TH0=0xFF; TL0=0xB2; Time01ms++; if(Time01ms>a) { PWM=0; } else { PWM=1; } if(Time01ms==10) Time01ms=0; } void intrr() interrupt 4 { char temp; ES=0; //暂时关闭串口中断 if(RI==1) //等待接收完成 { temp=SBUF; RI=0; if(statue==1) { switch(temp) { case 0x30: { a=10; dianya=7; value=0; //全功率 }break; case 0x31: { value=1; //半功率 a=7; dianya=4; }break; case 0x32: { value=2; // a=5; dianya=3; }break; case 0x33: { value=3; // a=3; dianya=1; }break; default: break; } } } ES=1;//重新开启串口中断 }
|
|
相关推荐
1个回答
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
418 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1083 浏览 0 评论
846 浏览 0 评论
886 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
882 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11834 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 04:49 , Processed in 0.667337 second(s), Total 82, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号