问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求51单片机程序

发布网友 发布时间:2022-04-25 18:29

我来回答

1个回答

热心网友 时间:2023-10-23 18:07

这是51单片机频率计程序,弄明白了写你的程序就 很简单了
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
//定义以I/O口的功能
sbit beiguang=P3^2;//液晶屏背光
sbit rs=P1^3;//液晶屏写选择,0命令 1数据
sbit rw=P1^4;//液晶屏读写选择
sbit lcden=P1^5;//液晶屏使能
#define db P2 //定义P2为数据输出口,写数据时用db代替P2,增加液晶屏程序的通用性

//更改硬件接线时,只更改此处,而不必去更改液晶屏读写子程序
uchar aa,bb,cc;
uint dd,ee;
void Delay1ms(unsigned int i) //1ms延时程序
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void init()//初始化设置
{
TMOD=0x15;//定时器0作为计数器,定时器1作为定时器用
TH0=0;//计数器清0
TL0=0;
EA=1;//开总中断
ET1=1;//允许定时器1中断
TH1=0x4c;
TL1=0x5c;
TR0=1;//启动计数器
TR1=1;//启动定时器
aa=0;
}
void write_com(uchar com)//向液晶屏写命令
{
db=com;
rs=0;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void write_date(uchar date)//向液晶屏写数据
{
db=date;
rs=1;
rw = 0;
lcden=0;
Delay1ms(10*12);
lcden=1;
Delay1ms(10*12);
lcden=0;
}
void init2()//液晶屏初始化
{
beiguang=0;
rw=0;
write_com(0x38);//显示模式16字*2行,5*7点阵,数据口8位
Delay1ms(10*12);
write_com(0x0f);//开显示,显示光标,光标闪烁
Delay1ms(10*12);
write_com(0x06);//写完数据后数据指针和光标位置自动加1
Delay1ms(10*12);
write_com(0x01);//屏幕清除
Delay1ms(10*12);
}
void display4(unsigned int number) //单行多位显示程序
{
uchar A1,A2,A3,A4,A5;
init2();//液晶屏初始化
A1=number/10000%10;//分离出十万,万,千,百,十,个
A2=number/1000%10;
A3=number/100%10;
A4=number/10%10;
A5=number%10;

write_com(0x80);//第1个数据的位置设定,第1行第1列
Delay1ms(10);
write_date(0x30+A1);//写数据
Delay1ms(10);
write_date(0x30+A2);
Delay1ms(10);
write_date(0x30+A3);
Delay1ms(10);
write_date(0x30+A4);
Delay1ms(10);
write_date(0x30+A5);
Delay1ms(10);

write_com(0x87);//第6个数据'H'的位置,中间空85和86 二格
write_date('H');
Delay1ms(10);
write_date('z');
Delay1ms(10);
}
void main()//主程序很简单
{
init();//初始化
while(1)//循环程序
{
dd=bb*256+cc;//0.5S的计数值
ee=2*dd;//换算为1秒钟的计数值
if(aa==1)
{
if(TH0>12)//预判断,50ms内TH0>12,1s内计数值将超过可计数的最大值65535
fm=1;//报警
}
display4(ee);//显示
fm=0;//报警停止
}
}
void timer1()interrupt 3//注意:定时器1的中断序号为3
{
aa++;
TH1=0x4c;//11.0592Mhz
//TL1=0;//11.0592Mhz
TL1=0x5c;//实际电路振荡频率11.03705Mhz,对TL1修正
if(aa==10)//中断10次,共0.5S
{
TR0=0;//暂停计数
aa=0;
bb=TH0;//读出计数器数据
cc=TL0;
TL0=0;//计数器清0
TH0=0;
TR0=1;//重新启动计数器
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
重磅|8月1日起 报关单的填法将重大改变 进出口权需要报关员么 宝宝被莫名的虫子咬了又红又肿又痒怎么? 北京疫情个为数是什么意思? 在做刀伤的手术时没有接上神经是医院的过错吗? 手术室收费项目有哪些 手术室的秘密:一台10万的手术,主刀医生拿多少?答案颠覆你的认知 阿里巴巴中修改产品信息只修改一小部分行吗?谢谢 可否给我一个阿里巴巴的序列号~谢谢了 阿里巴巴店铺产品搜索框代码谁有呢,给我发一下谢谢了! 51单片机水滴 51单片机怎么休眠 单片机液位控制 怎么用1.5v的电池给51单片机供电(单片机上有液晶)? 51单片机的 怎么学 最快 深入学习51单片机 51单片机该怎么学? 我想用51系列单片机显示水压,谁能帮帮我 在下想做一个基于51单片机的液位监测系统。但情况比较特殊在下又才疏学浅,故来请教各位高手。 51单片机连接两个液位传感器需要一块还是两块AD转换器 基于51单片机的红外感应泵液器的设计 基于mcs-51单片机的液位控制电路设计 编写51单片机实现液晶上字的循环显示和移动程序? 如何用51单片机控制控制水泵,使水箱里的液位达到预定高度。 51单片机字符液晶屏(LMC1602)输出端RS,RW还有E分别都有什么作用? 羊肉冬瓜汤 冬瓜羊肉汤怎么做好吃又营养 城镇职工保险和社保有什么区别? 职工保险有哪些险种 职保和社保有什么区别 怎么能让电脑读取U盘系统 鸿蒙系统怎么读取u盘,华为Mate20? 51单片机LCD显示 51单片机连接LCD 谁有51单片机彩色液晶程序的详解啊??? 51单片机液晶高手进 51单片机驱动1602 程序 DS18B20 与51单片机 怎么用 ? 51单片机温度传感器ds18b20、lcd1602液晶C程序 奥尔良鸡丁的做法,奥尔良鸡丁怎么做好吃,奥尔 有没有功能强大的PDF编辑器,要能编辑文字,图片,表格的,最好是中文的? pdf格式的图片怎么编辑要用什么软件才能编辑 用什么软件能修改PDF图片 有什么pdf阅读软件可以直接修改图片内容呢 把图片转换成PDF,用什么软件可以编辑转好的PDF文件? 用什么软件可以编辑PDF里的矢量图最好的,图片都是些油路或电路图的图片... 由图片生成的PDF怎样可以修改呢,用什么软件呢? 红酒浇花的正确方法是什么? 图片格式的PDF文件直接转换成可编辑的文件的软件 变质的自酿葡萄酒可以用来浇花吗