资源简介
用proteus设计仿真的基于51单片机的电子秤电路,附带单片机源码。
代码片段和文件信息
#include“reg51.h“//头文件
#include
#define DD P2
sbit CS=P1^0; //定义端口
sbit CLK=P1^1;
sbit DO=P1^2;
sbit DI=P1^3;
sbit KEY=P1^7;
sbit buzzer=P0^0;
sbit Rs=P1^4;//LCD定义端口
sbit Rw=P1^5;
sbit E=P1^6;
sbit busy_p=ACC^7;
unsigned char CH=0x02key_count=1;
unsigned char HC[6]={0};
unsigned char BZ=0;
void delay_1ms(unsigned char i) //延时函数1ms
{
unsigned char j;
while(i--)
for(j=0;j<125; j++);
}
void delay_10ns(unsigned char i)//延时函数10ns
{
unsigned char j;
while(i--)
for(j=0;j<10; j++);
}
void xiezhiling(unsigned char combit p)//写命令函数
{
if(p)
delay_10ns(5);
E=0;
Rs=0;
Rw=0;
DD=com;
delay_10ns(50);
E=1;
delay_1ms(2);
E=0;
delay_10ns(4);
}
void xieshuju(unsigned char DATA)//写数据函数
{
delay_10ns(50);
E=0;
Rs=1;
Rw=0;
DD=DATA;
delay_10ns(50);
E=1;
delay_10ns(50);
E=0;
delay_10ns(4);
}
void init(void)//初始化函数
{
delay_1ms(15);
xiezhiling(0x380);
delay_1ms(5);
xiezhiling(0x380);
delay_1ms(5);
xiezhiling(0x380);
delay_1ms(5);
xiezhiling(0x381); //功能设定(8位,2行,5*7点矩阵)
xiezhiling(0x081);
xiezhiling(0x011); //清除屏幕
xiezhiling(0x061); //加1
xiezhiling(0x0c1);//显示器ON,光标OFF,闪烁OFF
}
unsigned char ADconv(void)//AD转换子程序
{
unsigned char i;
unsigned int data_f=0data_c=0;
DI=1;
CS=1;
_nop_();
CS=0;
DI=1; ;
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=1;
DI=(bit)(0x02&CH);
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=1;
DI=(bit)(0x01&CH);
_nop_();
_nop_();
CLK=0;
DI=1;
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
CLK=1;
for(i=8;i>0;i--)
{
data_f|=DO;
data_f<<=1;
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
}
for(i=8;i>0;i--)
{
data_c<<=1;
data_c|=DO;
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
}
CLK=0;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CLK=1;
_nop_();
CS=1;
_nop_();
_nop_();
return data_f;
}
void xs_int(unsigned int shuju)//将一个数据各个位分开并存放在H C[]数组中
{
if(shuju < 10)
BZ = 1;
else if(shuju < 100) BZ = 2;
else if(shuju < 1000) BZ = 3;
else if(shuju < 10000) BZ = 4;
else if(shuju < 65535) BZ = 5;
switch(BZ)
{
case 5:HC[5] = shuju/10000; //百位
case 4:HC[3] = shuju%10000/1000;//十位
case 3:HC[2] = shuju%1000/100;//个位
case 2:HC[1] = shuju%100/10;//小数点后一位
case 1:HC[0] = shuju%10;
break;
default:break;
}
}
void main(void)//主函数
{
unsigned int data_temp=0;
init();
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
while(1)
{
data_temp=ADconv();
if(data_temp>128)//报警数值
{
EA=1;
}
else
{
EA=0;
buzzer=0;
}
P3=~data_temp;
xs_int(196*data_temp);
if(KEY==0)
{
delay_1ms(10);
if(KEY==0)
while(!KEY);
key_count++;
if(key_count==3)
key_count=1;
xiezhiling(0x010);
}
if(key_count==1)
{
xiezhiling(0x801);//LCD第一行
xieshuju(‘P‘);
xieshuju(‘R‘);
xieshuju(‘E‘);
xieshuju(‘S‘);
xieshuju(‘S‘);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 20412 2018-07-24 13:53 电子秤proteus仿真及源码\电子秤仿真.pdsprj
文件 4581 2018-07-24 10:41 电子秤proteus仿真及源码\电子称仿真.c
文件 3731 2018-07-24 10:53 电子秤proteus仿真及源码\电子称仿真.hex
文件 13279 2018-07-24 11:43 电子秤proteus仿真及源码\电子称仿真.uvproj
目录 0 2018-07-24 14:25 电子秤proteus仿真及源码\
相关资源
- 单片机仿真软件proteus6.7免安装绿色版
- 关于proteus仿真arm7出现错误的问题
- 基于PROTEUS的ARM7显示系统设计与仿真实
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
- 51单片机定时器/计数器的结构和原理
- MCS-51单片机定时器和计数器区别的理
- STM32+1602液晶proteus仿真.zip
- AT89C51+ADC0808 PROTEUS仿真
- 基于51单片机的多通道数据采集范围控
- ADC0832ADC0809DAC0832三种芯片程序,c程序
- 基于51单片机的直流电机转速控制及显
- 单片机驱动4相步进电机proteus仿真
- 高速公路快速放行提示系统
- 光敏电阻传感器模块4线制
- 51单片机_DS1302时钟芯片_共阴数码管
- proteus元件库对照表 (整理清晰)
- 基于51单片机的教室智能照明控制系统
- 基于单片机的智能低电阻测量仪
- 微机原理 十字路口交通灯控制 prot
- 中央空调室内智能温控器设计论文、
- 电动车智能充电桩全套
- 五路循迹智能小车
- 基于51单片机的交通灯设计
- 51 教室智能灯 控制系统
- 基于AT89C51的十字路口交通灯设计pro
- Proteus单片机仿真大全几百个part4
- 51单片机125Khz ID卡读卡程序
- Proteus升压电路仿真
- 51单片机课程设计内含50多个课程设计
评论
共有 条评论