显示芯片用max7219 ,时钟芯片采用DS1302.温度芯片采用18b20 ,光敏电阻采用4516
附原理图,和程序代码,
单片机源程序如下:
- #include "all.h"
- //======================================
- void Write_Max7219_byte(char DATA)
- {
- char i;
- Max7219_pinCS=0; //CS=0有效,CS=1锁存
- for(i=8;i>=1;i--)
- {
- Max7219_pinCLK=0;
- Max7219_pinDIN=DATA&0x80; //&10000000, 编译器对位操作的理解:非0即为1
- DATA=DATA<<1;
- Max7219_pinCLK=1; //上升沿把数据送出去
- }
- }
- //-------------------------------------------
- /*向M第一片MAX7219写入数据*/
- void Write_Max7219_1(char add1,char dat1)
- {
- Max7219_pinCS=0;
- Write_Max7219_byte(add1); //写入地址,即数码管编号
- Write_Max7219_byte(dat1); //写入数据,即数码管显示数字
- Max7219_pinCS=1;
- }
- //===========================================
- //初始化
- void Init_MAX7219()
- {
- Write_Max7219_1(0x09, 0xff); //译码方式:BCD码
- //Write_Max7219_1(0x0a, 0xf0); //亮度
- Write_Max7219_1(0x0b, 0x05); //扫描界限;8个数码管显示
- Write_Max7219_1(0x0c, 0x01); //掉电模式:0,普通模式:1
- Write_Max7219_1(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0
- }
复制代码- #include "all.h"
- //*************************************************************
- //主晶振在20-35之间
- //低于20MHZ 温度无法使用
- //自用晶振35MHZ
- //=================================================================
- //IO口初始化
- void io_init()
- {
- P1M0&=0x00;P1M1&=0x00; //P3口,准双
- P3M0&=0x00;P3M1&=0x00; //P1口,准双
- }
- //=================================
- //max7219显示
- void max7219_xs()//max7219xs
- {
- static uint i;
- i++;
- if(i>2000)
- {
- Write_Max7219_1(1,TIME[2]>>4); //显示时高位
- Write_Max7219_1(2,TIME[2]&0X0F); //显示时低位不带小数点,
- Write_Max7219_1(3,TIME[1]>>4);//显示分高位
- Write_Max7219_1(4,TIME[1]&0X0F);//显示分低位
- Write_Max7219_1(5,TIME[0]>>4);//显示秒高位
- Write_Max7219_1(6,TIME[0]&0x0f);//显示秒。低位
- }
- if(i>4000)
- {
- i=0;P15=1;
- Write_Max7219_1(1,TIME[2]>>4); //显示时高位
- Write_Max7219_1(2,((TIME[2]&0X0F)|0x80)); //显示时低位,带小数点,
- Write_Max7219_1(3,TIME[1]>>4);//显示分高位
- Write_Max7219_1(4,TIME[1]&0X0F);//显示分低位
- Write_Max7219_1(5,TIME[0]>>4);//显示秒高位
- Write_Max7219_1(6,TIME[0]&0x0f);//显示秒。低位
- }
- }
- void WDT_CONTR_allog() //看门狗定时器 2.5s定时
- {
- WDT_CONTR=0x36;
- }
- void main()
- {
- io_init(); //io口初始化
- Init_MAX7219(); //max7219初 始化
- anjian();//主按键使用,屏蔽所有功能无法使用
- adc_init(); //adc调节亮度初始化
- Ds1302Init(); //ds1302初始化赋值初始时间
- while(1)
- {
- Ds1302ReadTime(); //ds1302读取
- WDT_CONTR_allog();//看门狗定时器
- adc_ld(); //亮度调节
- anjian_0();//显示时间
- anjian_1();//显示日期
- anjian_2();//显示周
- anjian_3();//判断一次
- anjian_4();//显示温度
- anjian_5();//调整年
- anjian_6();//调整月
- anjian_7();//调整日
- anjian_8();//调整时
- anjian_9();//调整分
- anjian_10();//调整秒
- anjian_11();//调整周
- anjian_12();//返回显示时间
- anjian_k3(); //返回显示时间
-
-
- }
- }
复制代码
所有资料51hei提供下载:
原理图.rar
(18.53 KB, 下载次数: 50)
程序.rar
(91.28 KB, 下载次数: 37)
|