資源簡介
用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仿真及源碼\
評論
共有 條評論