337 基于单片机数字频率计仿真设计(仿真 程序 原理图 pcb 论文)【毕设课设】

完整版 电路图和程序代码 下载地址

https://pan.baidu.com/s/1ETxlko5AsaqQvoNRZndiDA?pwd=8888

部分代码展示

include<reg51.h>
#include<stdio.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int  uint;
sbit SDA1=128;//串行数据输入,对应595的14脚SER
sbit SCL1=129;//移位寄存器时钟输入,对应595的11脚SCK
sbit SCL2=130;//存储寄存器时钟输入,对应595的12脚RCK
sbit SDA2=131;//串行数据输入,对应595的14脚SER
sbit SCL3=132;//移位寄存器时钟输入,对应595的11脚SCK
sbit SCL4=133;//存储寄存器时钟输入,对应595的12脚RCK

sbit Alert1 = P2^7; //蜂鸣器超限报警
sbit Alert2 = P2^6; //LED超限报警

sbit CLK=P2^0;
sbit DO=P2^1;
sbit DI=P2^1;
sbit CS=P2^2;
sbit CLR=P3^0;
sbit GATE=P3^1;
sbit K1=P3^7;
uint num=0;
uint c=0;
float d=0;
uchar e=1,f=1;
unsigned long int aaa=0,bbb=0;
//以下是LCD1602驱动程序
void delay1000(uint aaaaaa)
{
	uint bbbbbb,cccccc;
	for(bbbbbb=aaaaaa;bbbbbb>0;bbbbbb--)
		for(cccccc=110;cccccc>0;cccccc--);
}
void in(uchar dddddd)
{
	uchar eeeeee;
	for(eeeeee=0;eeeeee<8;eeeeee++)   //循环8次,刚好移完8位
	{
      	dddddd<<=1;
	  	SCL1=CY;
	  	SDA1=1;        //先将移位寄存器控制引脚置为低    
      	_nop_();
	  	_nop_();
      	SDA1=0;
	}
}
void out()
{
	SCL2=0;   //先将存储寄存器引脚置为低
	_nop_(); 
	SCL2=1;    //再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。
	_nop_(); 
	SCL2=0;
}
void in1(uchar ffffff)
{
	uchar gggggg;
	for(gggggg=0;gggggg<8;gggggg++)   //循环8次,刚好移完8位
	{
      	ffffff<<=1;
	  	SCL3=CY;
	  	SDA2=1;        //先将移位寄存器控制引脚置为低    
      	_nop_();
	  	_nop_();
      	SDA2=0;
	}
}
void out1()
{
	SCL4=0;   //先将存储寄存器引脚置为低
	_nop_(); 
	SCL4=1;    //再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。
	_nop_(); 
	SCL4=0;
}
void write_com(uchar hhhhhh)
{
	in(248);//再传段码
	out();
	delay1000(2);//延迟时间2ms以内
	in1(hhhhhh);  //再传段码
	out1();
	delay1000(2);             //延迟时间2ms以内
	in(252);//再传段码
	out();
	delay1000(2);//延迟时间2ms以内
	in(248);//再传段码
	out();
	delay1000(2);//延迟时间2ms以内
}
void write_date(uchar iiiiii)
{
	in(249);//再传段码
	out();
	delay1000(2);//延迟时间2ms以内
	in1(iiiiii);  //再传段码
	out1();
	delay1000(2);             //延迟时间2ms以内
	in(253);//再传段码
	out();
	delay1000(2);//延迟时间2ms以内
	in(249);//再传段码
	out();
	delay1000(2);//延迟时间2ms以内
}
//LCD1602液晶初始化子函数
void LCD_init() 
{
    write_com(56);
	write_com(12);
	write_com(6);
	write_com(128);
	write_com(1);
}
void LCD_sfj1(uchar x,uchar y)
{
	if(y==0)
		write_com(0x80|x);
	if(y==1)
		write_com(0x80|(x-0x40));
}
void LCD_print(uchar *p)
{
	while(*p!='\0')
	{
		write_date(*p);
		p++;
	}
}
void delay1(uchar x)//ms延时子函数
{ 		   
    uchar i;
    for(i=0;i<x;i++); //延时,脉冲一位持续的时间
}
uchar start(bit temp) //把模拟电压值转换成8位二进制数并返回,dat为通道选择。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值