您的位置: 城市头条网> 生活 >

每日速读!proteus电阻名称

2023-06-14 12:22:19   Harmony&嵌入式学习


(资料图片)

一、设计说明电子秤是利用应变电阻,将压力信号转变成模拟电压信号,再利用A/D转换,将电信号转换成压力信号进行压力测量,测量最大值,10Kg,将测量到的数据通过MODBUS通信协议传送到上位机。二、设计要求1.能测量10Kg重物的压力,并用数码管显示输入及译码结果。在选择器件时,应考虑成本。2.采用MODBUS串口调试助手显示压力测量值。3.可选元件:(1)自带A/D功能的单片机;(2)LCD1602等。三、实验要求1.根据技术指标制定实验方案;验证所设计的电路。2.进行实验数据处理和分析。

#include #define uchar unsigned char#define uint unsigned int#define ulong unsigned longulong volt;//测量的电压值#define LCD1602_DATAPINS P0#define TIME 5sbit LCD1602_E=P2^2;sbit LCD1602_RW=P2^1;sbit LCD1602_RS=P2^0;sbit CLK=P3^7;//定义时钟信号口sbit DIN=P3^5;//定义2543数据写入口sbit DOUT=P3^4;//定义2543数据读取口sbit CS=P3^6;//定义2543片选信号口uchar datt;uint ALL_num;uint Result;uint Dis_num;void read2543(uchar addr){uint ad=0;uchar i;CLK=0;CS=0;//片选段,启动2543addr<<=4;//对地址位预处理for(i=0;i<12;i++) //12个时钟走完,完成一次读取测量{if(DOUT==1)ad=ad|0x01;//单片机读取ad数据DIN=addr&0x80;//2543读取测量地址位CLK=1;;;;//很短的延时CLK=0;//产生下降沿,产生时钟信号;;;addr<<=1;ad<<=1;//将数据移位准备下一位的读写}CS=1;//关2543ad>>=1;volt=ad;//取走转换结果volt=volt*2444;//例子的满量程为5V,转换分辩率为12位(2的12次方=4096) 。即最大值是255,5/4096=1221mV,即例子中的1V代表实际1221mV        }/******************************************************************************** 函 数 名         : Lcd1602_Delay1ms* 函数功能   : 延时函数,延时1ms* 输    入         : c* 输    出         : 无* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。*******************************************************************************/void Lcd1602_Delay1ms(uint c)   //误差 0us{    uchar a,b;for (; c>0; c--){ for (b=199;b>0;b--) {  for(a=1;a>0;a--); }      }    }/******************************************************************************** 函 数 名         : LcdWriteCom* 函数功能   : 向LCD写入一个字节的命令* 输    入         : com* 输    出         : 无*******************************************************************************/void LcdWriteCom(uchar com)  //写入命令{LCD1602_E = 0;     //使能LCD1602_RS = 0;   //选择发送命令LCD1602_RW = 0;   //选择写入LCD1602_DATAPINS = com;     //放入命令Lcd1602_Delay1ms(1);//等待数据稳定LCD1602_E = 1;          //写入时序Lcd1602_Delay1ms(5);  //保持时间LCD1602_E = 0;}/******************************************************************************** 函 数 名         : LcdWriteData* 函数功能   : 向LCD写入一个字节的数据* 输    入         : dat* 输    出         : 无*******************************************************************************/      void LcdWriteData(uchar dat)//写入数据{LCD1602_E = 0;//使能清零LCD1602_RS = 1;//选择输入数据LCD1602_RW = 0;//选择写入LCD1602_DATAPINS = dat; //写入数据Lcd1602_Delay1ms(1);LCD1602_E = 1;   //写入时序Lcd1602_Delay1ms(5);   //保持时间LCD1602_E = 0;}/******************************************************************************** 函 数 名       : LcdInit()* 函数功能 : 初始化LCD屏* 输    入       : 无* 输    出       : 无*******************************************************************************/   void LcdInit()  //LCD初始化子程序{ LcdWriteCom(0x38);  //开显示LcdWriteCom(0x0c);  //开显示不显示光标LcdWriteCom(0x06);  //写一个指针加1LcdWriteCom(0x01);  //清屏LcdWriteCom(0x80);  //设置数据指针起点}//按指定位置显示一个字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData){ Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40; X |= 0x80; // 算出指令码 LcdWriteCom(X); //这里不检测忙信号,发送地址码 LcdWriteData(DData);}//按指定位置显示一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData){ unsigned char ListLength;  ListLength = 0; Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]>=0x20) //若到达字串尾则退出  {   if (X <= 0xF) //X坐标应小于0xF    {     DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符     ListLength++;     X++;    }  }}void UsartInit(){ TMOD=0x20;   //设T1为方式2(8位自动重装载) T0为方式1(16位) TH1=0xf3;         //定时器1定时12us TL1=0xf3; TR1=1;            //开定时器1 SCON=0x50;        //SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志 PCON=0x80;        //串口波特率加倍 ES=1;             //串口中断允许位 EA=1;   //开启总中断}void Uart1Send(uchar c){SBUF=c;while(!TI);TI=0;}void Uart1Sends(uchar *str){while(*str!="�"){SBUF=*str;while(!TI);TI=0;str++;}}void main(void){UsartInit();LcdInit();EX0=1;       //外部中断0开()  EX1 为外部中断1 (P3^3)IT0=1;        //低电平触发   IT1为中断1DisplayListChar(1,0,"Measure System");DisplayOneChar(2,1,".");DisplayOneChar(5,1,"K");DisplayOneChar(6,1,"g");while(1){read2543();DisplayOneChar(0,1,(char)(volt/10000000)+"0");DisplayOneChar(1,1,(char)(volt/1000000%10)+"0");DisplayOneChar(3,1,(char)(volt/100000%10)+"0");DisplayOneChar(4,1,(char)(volt/10000%10)+"0");Lcd1602_Delay1ms(200);}}void Key_INT( )  interrupt 0  // 这里0对应下表{uchar buff[8],datt1;Uart1Sends("NOW WIGHT:"); buff[0] = (char)(volt/10000000)+"0";buff[1] = (char)(volt/1000000%10)+"0";buff[2] = ".";buff[3] = (char)(volt/100000%10)+"0";buff[4] = (char)(volt/10000%10)+"0";buff[5] = "K";buff[6] = "g";for(datt1=0;datt1<7;datt1++){Uart1Send(buff[datt1]);}Uart1Sends("rn");}
审核编辑:汤梓红

标签:

新闻速递

精彩推送

联系我们:55 16 53 8@qq.com

网站地图  合作伙伴  版权声明  关于本站

京ICP备2021034106号-9 营业执照公示信息

城市资讯网版权所有,未经同意不得转载、复制或建立镜像