资源简介
用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仿真及源码\
相关资源
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- proteus仿真 AT89C51输出各种波形
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- proteus_24C08—有注释(proteus里面使用的
- DS18B20分布式多点测温的Proteus仿真
- 基于proteus的单片机仿真--交通灯控制
- 带时间温度显示的室内灯光控制系统
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 51单片机频率计(很简单)
- 51多机通信(内附Proteus及.hex文件)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
评论
共有 条评论