#include<reg52.h>
#include<INTRINS.H>
sbit SCL = P0^6;
sbit SDA = P0^7;
sbit HC595_SCK = P1^1;
sbit HC595_RCK = P1^0;
sbit HC595_DATA = P1^4;
unsigned char addr = 0x01,read_data;
unsigned char second = 59,minute = 59,hour = 11,day = 25,month = 11,week = 3,year = 16;
unsigned char time[] = {50,59,23,31,12,3,16};//定义ds1302初始化的时间
code unsigned char Duan_choose[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
code unsigned char Wei_choose[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
/*****************************************************************************
** 函数名称:Delay_I2C
** 功能描述:延时子程序
******************************************************************************/
void Delay_i2c(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void Delay(unsigned int i)
{
unsigned char j;
for(;i>0;i--)
{
for(j = 0;j < 110;j++)
{}
}
}
void InitI2C(void)
{
SDA = 1;
SCL = 1;
}
/*I2C起始信号*/
void i2c_start_fun()
{
SDA = 1;
Delay_i2c();
SCL = 1;
Delay_i2c();
SDA = 0;
Delay_i2c();
SCL = 0;
}
/*i2c停止信号*/
void i2c_stop_fun()
{
SCL = 0;
Delay_i2c();
SDA = 0;
Delay_i2c();
SCL = 1;
Delay_i2c();
SDA = 1;
Delay_i2c();
}
/*i2c向器件即eeprom中写入数据*/
void i2c_write_data(unsigned char byte)//i2c先发送高位再发送低位
{
unsigned char i;
unsigned char j;
unsigned char mask = 0x80;
for(i = 0;i < 8;i++)
{
SCL = 0; //只有在scl为低电平的时候,sda的状态才能发生变化
Delay_i2c();
if(0 == (mask&byte)) //必须得是判断0 == (mask&byte),如果是判断1 == (mask&byte)的话,那么会出错
{
SDA = 0;
}
else
{
SDA = 1;
}
mask >>= 1;
Delay_i2c();
SCL = 1; //在sda发送数据时,scl必须保持高电平
Delay_i2c();
}
SCL = 0; //最后SCL经历了一个从低电平到高电平再到低电平的变化,而SDA的状态一直不变
SDA = 1;
Delay_i2c(); //还缺少接受从机应答位的语句
SCL = 1;
j = SDA;
Delay_i2c();
SCL = 0;
}
unsigned char i2c_read_data()
{
unsigned char i;
unsigned char byte = 0;
for(i = 0;i < 8;i++)
{
SCL = 0;
SDA = 1;//每一次必须先将SDA置高电平
Delay_i2c();
SCL = 1;
Delay_i2c();
byte <<= 1; //先左移一位,如果左移放在if语句后面的话,当i=7的时候,最后还会执行一句左移,那么最高位将会被移出去
if(1 == SDA)
{
byte = byte | 0x01;
}
Delay_i2c();
}
SCL = 0;
SDA = 1;
Delay_i2c();
SCL = 1;
Delay_i2c();
SCL = 0;
return byte;
}
/*i2c向eeprom中写入数据*/
void i2c_write_eeprom(unsigned char addr,unsigned char databyte)
{
i2c_start_fun();//在写函数的开始需要一个起始信号
i2c_write_data(0xa0);//先写入器件即eeprom的地址
i2c_write_data(addr);//再写入数据存储地址
i2c_write_data(databyte);//最后写入要发送的数据
i2c_stop_fun();//在写函数的最后需要一个停止信号
}
/*i2c从eeprom中读取数据*/
unsigned char i2c_read_eeprom(unsigned char addr)
{
unsigned char databyte;
i2c_start_fun();
i2c_write_data(0xa0);
i2c_write_data(addr);
i2c_start_fun();
i2c_write_data(0xa1);
databyte = i2c_read_data();
i2c_stop_fun();
return databyte;
}
/*定时器初始化 中断初始化 串口控制寄存器SCON初始化*/
void UART_init(void)
{
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ET1 = 0; //禁止定时器1中断
EA = 1;
ES = 1;
}
/*void UART_Send_Byte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
} */
void Send_data(unsigned char duan,unsigned char wei)
{
unsigned char i; //还是用hc595移位寄存器来进行操作,参照着数码管的原理与时序来写程序
HC595_RCK = 0;
for(i = 0;i < 8;i++)
{
HC595_SCK = 0;
if(0 != (duan&0x80))
{
HC595_DATA = 1;
}
else
{
HC595_DATA = 0;
}
HC595_SCK = 1;
duan = duan << 1;
}
for(i = 0;i < 8;i++)
{
HC595_SCK = 0;
if(0 != (wei&0x80))
{
HC595_DATA = 1;
}
else
{
HC595_DATA = 0;
}
HC595_SCK = 1;
wei = wei << 1;
}
HC595_RCK = 1;
}
void main()
{
unsigned char i,j;
UART_init();
InitI2C();
i2c_write_eeprom(0x01,time[0]);
i2c_write_eeprom(0x02,time[1]);
i2c_write_eeprom(0x03,time[2]);
i2c_write_eeprom(0x04,time[3]);
i2c_write_eeprom(0x05,time[4]);
i2c_write_eeprom(0x06,time[5]);
i2c_write_eeprom(0x06,time[6]);
/*while(1)
{
for(i = 10000;i>0;i--)
{
for(j = 0;j < 110;j++)
{
Send_data(Duan_choose[second1],Wei_choose[0]);
Send_data(Duan_choose[second2],Wei_choose[1]);
}
}
Delay(1000);
for(i = 10000;i>0;i--)
{
for(j = 0;j < 110;j++)
{
Send_data(Duan_choose[minute1],Wei_choose[0]);
Send_data(Duan_choose[minute2],Wei_choose[1]);
}
}
Delay(1000);
for(i = 10000;i>0;i--)
{
for(j = 0;j < 110;j++)
{
Send_data(Duan_choose[hour1],Wei_choose[0]);
Send_data(Duan_choose[hour2],Wei_choose[1]);
}
}
Delay(1000);
for(i = 10000;i>0;i--)
{
for(j = 0;j < 110;j++)
{
Send_data(Duan_choose[day1],Wei_choose[0]);
Send_data(Duan_choose[day2],Wei_choose[1]);
}
}
Delay(1000);
for(i = 10000;i>0;i--)
{
for(j = 0;j < 110;j++)
{
Send_data(Duan_choose[month1],Wei_choose[0]);
Send_data(Duan_choose[month2],Wei_choose[1]);
}
}
Delay(1000);
for(i = 10000;i>0;i--)
{
for(j = 0;j < 110;j++)
{
Send_data(Duan_choose[week1],Wei_choose[0]);
Send_data(Duan_choose[week2],Wei_choose[1]);
}
}
Delay(1000);
for(i = 10000;i>0;i--)
{
for(j = 0;j < 110;j++)
{
Send_data(Duan_choose[year1],Wei_choose[0]);
Send_data(Duan_choose[year2],Wei_choose[1]);
}
}
Delay(1000);
}
*/
/* UART_Send_Byte(i2c_read_eeprom(0x01)+'0');
UART_Send_Byte(i2c_read_eeprom(0x02)+'0');
UART_Send_Byte(i2c_read_eeprom(0x03)+'0');
UART_Send_Byte(i2c_read_eeprom(0x04)+'0');
UART_Send_Byte(i2c_read_eeprom(0x05)+'0');
UART_Send_Byte(i2c_read_eeprom(0x06)+'0');
UART_Send_Byte(i2c_read_eeprom(0x08)+'0');
UART_Send_Byte(i2c_read_eeprom(0x09)+'0');
UART_Send_Byte(i2c_read_eeprom(0x0a)+'0');
UART_Send_Byte(i2c_read_eeprom(0x0b)+'0');
UART_Send_Byte(i2c_read_eeprom(0x0c)+'0');
UART_Send_Byte(i2c_read_eeprom(0x0d)+'0');
*/
}
没有合适的资源?快使用搜索试试~ 我知道了~
51单片机代码.zip
共598个文件
bak:77个
plg:69个
lst:68个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 100 浏览量
2024-06-14
22:14:52
上传
评论
收藏 1020KB ZIP 举报
温馨提示
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
资源推荐
资源详情
资源评论
收起资源包目录
51单片机代码.zip (598个子文件)
1602 4KB
ds1302_clock_lcd1602.uvgui.18633 71KB
lead_eeprom.uvgui.18633 71KB
adc.uvgui.18633 70KB
i2c_mcu_uart.uvgui.18633 69KB
18b20.uvgui.18633 69KB
18b20.uvgui.18633 69KB
18b20 11KB
18b20 9KB
i2c_pcf8591.__i 137B
Independent_Button.__i 127B
Independent_Button.__i 118B
1602.__i 116B
main.__i 107B
i2c_eeprom.__i 103B
i2c_eeprom.__i 103B
lcd1602.__i 94B
lcd1602.__i 94B
hc595.__i 88B
hc595.__i 88B
18b20.__i 88B
hc595.__i 88B
hc595.__i 88B
main.__i 85B
main.__i 85B
lcd1602.__i 85B
main.__i 85B
lcd1602.__i 85B
led_to_center.__i 78B
main.__i 76B
main.__i 76B
main.__i 76B
STARTUP.A51 6KB
STARTUP.A51 6KB
a_f_0_7 3KB
ds1302_clock_lcd1602_uvopt.bak 60KB
独立式按键_uvopt.bak 59KB
Scan_Button_uvopt.bak 57KB
lead_eeprom_uvopt.bak 57KB
Matrix_Button_uvopt.bak 56KB
i2c_uart_uvopt.bak 55KB
IO_To_Serial_uvopt.bak 55KB
定时器_uvopt.bak 55KB
led_to_center_uvopt.bak 55KB
Timer_led_uvopt.bak 54KB
Shu_Ma_Guan_homework2_uvopt.bak 54KB
Shu_Ma_Guan_homework_uvopt.bak 54KB
i2c_mcu_uart_uvopt.bak 54KB
i2c_uart_uvopt.bak 54KB
shu_ma_guan_uvopt.bak 54KB
ultra_timer_uvopt.bak 54KB
Lesson7_1_uvopt.bak 54KB
Timer_led_uvopt.bak 54KB
light_led_uvopt.bak 54KB
Interrupt_uvopt.bak 54KB
lianxi_1_uvopt.bak 54KB
UART_RX_uvopt.bak 54KB
1602_uvopt.bak 54KB
UART_RX_Char_uvopt.bak 54KB
led_order_uvopt.bak 54KB
UART_uvopt.bak 54KB
send_button_mcu_uvopt.bak 54KB
ds_1302_uvopt.bak 54KB
adc_uvproj.bak 14KB
ds1302_clock_lcd1602_uvproj.bak 14KB
ds1302_clock_lcd1602_uvproj.bak 13KB
Matrix_Button_uvproj.bak 13KB
led_to_center_uvproj.bak 13KB
Scan_Button_uvproj.bak 13KB
独立式按键_uvproj.bak 13KB
i2c_uart_uvproj.bak 13KB
Interrupt_uvproj.bak 13KB
Lesson7_1_uvproj.bak 13KB
UART_RX_uvproj.bak 13KB
UART_RX_Char_uvproj.bak 13KB
UART_uvproj.bak 13KB
lianxi_1_uvproj.bak 13KB
test_uvproj.bak 13KB
ds1302_clock_lcd1602_uvopt.bak 6KB
adc_uvopt.bak 6KB
light_led_uvproj.bak 0B
定时器_uvproj.bak 0B
IO_To_Serial_uvproj.bak 0B
Shu_Ma_Guan_homework_uvproj.bak 0B
shu_ma_guan_uvproj.bak 0B
Shu_Ma_Guan_homework2_uvproj.bak 0B
Timer_led_uvproj.bak 0B
ultra_timer_uvproj.bak 0B
Timer_led_uvproj.bak 0B
ultra_Timer_uvproj.bak 0B
Timer_led_uvproj.bak 0B
1602_uvproj.bak 0B
beep_uvproj.bak 0B
interrupt_uvproj.bak 0B
uart_communication_uvproj.bak 0B
uart_communication_uvproj.bak 0B
send_button_mcu_uvproj.bak 0B
Led_shumaguan_uvproj.bak 0B
digital_bianmaqi_uvproj.bak 0B
digital_bianmaqi_uvproj.bak 0B
共 598 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
毕业小助手
- 粉丝: 2761
- 资源: 5583
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 年终总结,工作汇报 , PPT, PPT模板2
- 年终总结,工作汇报 , PPT, PPT模板3
- 5G终端串口AT命令 FM650 拔号脚本
- DM驱动下载,包含DmDialect-for-hibernate4.0等
- 5G终端串口AT命令 FM650 拔号脚本-改进
- 二手车网站二手车数据集.zip
- 5G终端串口AT命令 FM650 常用
- IEEE33节点配电网模型,附带有详细节点数据以及文献出处来源,MATLAB,simulink各个版本均可运行,可以进行潮流计算以及四种常见故障波形仿真,可以更线路模型,分布参数模型用于故障仿真(50
- 汽车装车机(自动装袋装水泥)sw17可编辑全套技术开发资料100%好用.zip
- java发送email,所需要的依赖
- 纸牌检测25-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- GLM-4系列:大型语言模型的发展与评估
- yolov安全帽佩戴检测,目标检测,附带可视化界面
- armv7l框架的树莓派可用的onnx库文件
- 平均海平面气压数据(HadSLP2).zip
- 全落地式清障车全套数模 cero2.0全套技术开发资料100%好用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功