单片机多路数据采集控制系统—软件仿真(2)

2018-11-28 16:06

图7 LCD1602显示器部分

分析:LCD1602详细介绍见图8和图9

图8 LCD1602引脚功能

图9 LCD1602引脚功能

图10 按键部分

分析:检测单片机引脚是否为低电平来判断是否按键按下。

图11 警报部分 分析:通过检测IN2口电压来警报,当电压大于上限制或者低于下限值会LED亮和蜂鸣器报警。 三、程序设计 1、程序框图: 开始 按键扫描 k0 显示设定的通道电压 K1 快速依次显示八通道各电压 K2 间隔一定时间显示各通道电压 K3 选择要显示的通道 K4 对IN2口进行报警控制 #define uchar unsigned char voidinit(); voidwrite_com(uchar); voidwrite_data(uchar); 2、程序代码: #include #include #include #define uint unsignedint void delay(uint);

voidwrite_sfm(uchar,uchar); void read(uint i); void display(uint i); void key(); ucharnum,shuju;

uint i=0,ii=0,b1,b2,t=3,tt,fre,flag; float b;

uchar code table[]=%uchar code table1[]=%uchar code

tab[8]={0x00,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0}; sbit RW=P1^7; sbit RS=P1^6; sbit EN=P1^5; sbit START=P3^6; sbit AD_INT=P3^2; sbit AD_ENA=P3^7; sbit k0=P1^0; sbit k1=P1^1; sbit k2=P1^2; sbit k3=P1^3; sbit k4=P1^4; sbit LED1=P3^5; sbit SPEAK=P3^4; /*****************主程序*****************/ void main() { init(); while(1) { key();

}

}

/*****************初始化LCD1602和中断服务*****************/ voidinit() { RW=0; //进入写操作

write_com(0x38); //显示十六位液晶

write_com(0x0c); //打开十六位液晶,不显示光标

write_com(0x06); //写下一个数右移以为 write_com(0x01); //清屏 write_com(0x80); //第一行写 for(num=0;num<15;num++) {

write_data(table[num]); //第一行写数据 delay(5);

}

write_com(0x80+0x40);

for(num=0;num<12;num++) //第二行写数据 {

write_data(table1[num]); delay(5); }

fre=50000; SPEAK=1; TMOD=0x11;

TH0=(65536-fre)/256; TL0=(65536-fre)%6; TH1=(65536-50000)/256; TL1=(65536-50000)%6; EA=1; ET0=1; ET1=1; TR1=0; TR0=0;

}

/*****************中断服务子程序*****************/ void timer0() interrupt 1 { TR0=0;

TH0=(65536-fre)/256; TL0=(65536-fre)%6; tt++; if(flag<40)

{

if(tt==0) { tt=0;

tt=50000;

SPEAK=~SPEAK; }

}

if(flag>=40&&flag<80) { tt=0; fre=50000; SPEAK=~SPEAK; }

if(flag>=80&&flag<120) { tt=0; fre=10000; SPEAK=~SPEAK; }

if(flag>=120&&flag<160) { tt=0; fre=5000; SPEAK=~SPEAK; }

if(flag>=160&&flag<200) { tt=0; fre=2500; SPEAK=~SPEAK; }

if(flag>=200&&flag<240) { tt=0; fre=1250; SPEAK=~SPEAK; }

if(flag>=240&&flag<280) { tt=0; fre=625; SPEAK=~SPEAK; }

if(flag>=280&&flag<320) { tt=0; fre=312; SPEAK=~SPEAK;

}

if(flag>=320&&flag<360) { tt=0; fre=156; SPEAK=~SPEAK; } TR0=1;

}

void timer1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%6; flag++; if(flag==360) { flag=0; fre=50000;

} }

/*****************LCD1602设置*****************/ voidwrite_com(uchar com) { RS=0;

//写指令

EN=0; //使能端拉低 delay(5);

P0=com; //输入地址,就是命令 EN=1; //使能端拉高,工作

delay(5);

EN=0;

//使能端拉低停止工作 delay(5);

}

voidwrite_data(uchar date) { RS=1; EN=0;

//使能端拉低

delay(5);


单片机多路数据采集控制系统—软件仿真(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:校园安全亮点工作总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: