1、 头文件
因为习惯原因和节约时间,虽然15单片机有专门的头文件,但是内部框架和51单片机是同样的,所以可以直接使用51的头文件,因为15的单片有多几个IO口,所以需要多定义几个IO口,另外引入头文件还有一些其他的,通过#include方式引入 ,代码模板如下。
- #include "reg52.h" //包含51单片机寄存器定义的头文件
- #include "intrins.h" //包含_nop_()定义的头文件
- #include "iic.h" //通信驱动
- #include "AT24C02.h" //数据写入
- #include "display.h" //数码管
- #include "cls.h" //关闭外设
- #include "delay.h" //延迟
- #include "key.h" //按键
- #include "interrupt.h"//中断
- sfr P4 = 0xC0; //定义P4 io口
- sbit P42 = P4^2;
- sbit P44 = P4^4;
2、 按键函数
(1) 普通按键
- sbit S7 = P3^0; //给io口命名
- unsigned char count=0;
- unsigned char key_value = 0;
- void key_scanf()
- {
- if(S7==0) //判断按键按下
- {
- Delay(5); //消抖 需要引入延时函数
- if(S7==0) //再次判断按键按下
- {
- key_value=1; //判断按下的数值
- count++; //判断按键按下次数
- while(!S7);
- }
- }
- }
(2) 矩阵按键
需要提前定义 n变量和key_value,count变量
- void key_scan()
- {
- P3=0xf0;P44=1;P42=1;
- if(P3!=0xf0||P44!=1||P42!=1)
- {
- Delay50ms();
- if(P3!=0xf0||P44!=1||P42!=1)
- {
- P3=0xf0;P44=1;P42=1;
- if(P44==0) n=0; //判断哪一列被拉低
- else if(P42==0) n=1;
- else if((P3&0X10)==0) n=3;
- else if((P3&0x20)==0) n=2;
- P3=0x0F;P44=0;P42=0; //行信号置零,列信号置一
- if((P3&0x01)==0) key_value =n; //判断哪一行被拉低
- else if((P3&0x02)==0) key_value =n+4;
- else if((P3&0x04)==0) key_value =n+8;
- else if((P3&0x08)==0) key_value =n+12;
- count++; //判断按键按下操作
- while(P3!=0x0F);
- }
- }
- }
3、 延时函数
延时函数可以通过软件直接生成精准延时,然后对其进行修改,这里的是一毫秒。通过形式参数可以实现调用不同时间的延时,因为延时会卡住单片机无法继续线下运行,因此中断中尽量少用。_nop_()需要引入同文件#include“intrins.h”。
- void Delay(unsigned int t) //@11.0592MHz
- {
- unsigned char i, j;
- for(;t>0;t--)
- {
- _nop_();
- _nop_();
- _nop_();
- i = 11;
- j = 190;
- do
- {
- while (--j);
- } while (--i);
- }
- }
4、 关闭外设
因为单片机初始化会默认所有引脚高电平,容易对外设产生影响,因此需要上电过乘进行外设的关闭。
- void cls_buzz(void) //关闭蜂鸣器,继电器等。
- {
- P2=(P2&0X1F)|0XA0;
- P0=0x00;
- P2&=0X1F;
- }
- void cls_led(void) //关闭led灯
- {
- P2=(P2&0X1F)|0X80;
- P0=0XFF;
- P2 &= 0X1F;
- }
- void cls_display(void) //关闭数码管
- {
- P2 = (P2&0x1F|0xC0);
- P0 = 0xff; //关闭位选起消影作用
- P2 &= 0x1f;
- }
5、 流水灯
流水灯千变万化,为了适用各种流水灯的操作,这里编写了能过适用各种方式的流水灯。可以静态点灯调用也可以动态点灯调用。
- unsigned char led_flash[8]={0x80,0x40,0x20,0x10,0x08,0x40,0x02,0x01}//通过数组方法点灯
- unsigned char led_num = 0;
- void led_location(unsigned char Led_Mode,unsigned char Led_Num)
- {
- P0=0xff; //消隐
- P2=(P2&0x1f)|0x80;
- switch(Led_Mode)
- {
- case 0:P0=0xff;break;
- case 1:P0=~(0x01<<Led_Num);break;
- case 2:P0=~(0x80>>Led_Num);break;
- case 3:P0=led_flash[Led_Num];break;
- case 4:P0=0x00;break;
- case 5:P0=~0x80;break;
- }
- P2&=0x1f;
- }
- void led_flash_mode1() //模式1的方法闪烁流水灯将函数放入循环中
- {
- if(led_flash_mode1_switch == 0xff)//led流水灯运行标志位
- {
- delay(500);//如果在中断中可以删除延迟,调节中断间隔。
- if(++led_num<8)
- {
- void led_location(1,led_num);
- }else
- {
- led_num=0;
- }
- }
- }
6、按键功能处理
需要放在循环中
- void key_pro()
- {
- if(count!=0)
- {
- count=0;
- switch(key_value)
- {
- case 1:led_flash_mode1_switch =~led_flash_mode1_switch;break;
- case 2:break;
- case 3:break;
- }
- }
- }
7、 数码管动态显示
动态显示就可以当作静态的功能,因此这里只用动态的方法。调用只需要对数组
- code unsigned char tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X7f,0XFF}; //数码管显示数字表
- // 0 1 2 3 4 5 6 7 8 9 . 无
- // 0 1 2 3 4 5 6 7 8 9 10 11
- unsigned char dspbuf[8] = {11,11,11,11,11,11,11,11};
- unsigned char dspcom = 0;
- void display(void) //数码管需要放入中断中扫描
- {
- P0 = 0xff;
- P2 = (P2&0x1F|0xE0);
- P2 &= 0x1f;
- P2 = (P2&0x1F|0xC0);
- P0 = (1<<dspcom);
- P2 = 0x1f;
- P2 = (P2&0x1F|0xE0);
- P0 = tab[dspbuf[dspcom]];
- P2 = 0x1f;
- if(++dspcom == 8)
- dspcom = 0; //如
- }
8、 中断函数
可以通过软件直接生成。
- void Timer0Init(void) //1毫秒@11.0592MHz
- {
- AUXR |= 0x80; //定时器时钟1T模式
- TMOD &= 0xF0; //设置定时器模式
- TL0 = 0xCD; //设置定时初值
- TH0 = 0xD4; //设置定时初值
- TF0 = 0; //清除TF0标志
- TR0 = 1; //定时器0开始计时
- ET0 = 1;
- EA = 1;
- }
- void T0time() interrupt 1
- {
- display();
- }
9、 温度函数
温度函数为调用官方提供的onewire.h因为15芯片的时间要快12倍因此需要将延迟函数进行变慢12倍。然后加入读取温度函数。
- void Delay_OneWire(unsigned int t)
- {
- unsigned char i;
- while(t--)
- for(i=0;i<12;i++);
- }
- unsigned char read_temper(void)
- {
- unsigned char low,high,temp;
- Init_DS18B20(); //初始化DS18B20
- Write_DS18B20(0xcc); //跳过芯片ROM区
- Write_DS18B20(0x44); //启动温度转换
- Delay_OneWire(200); //延时
- Init_DS18B20(); //重复初始化DS18B20
- Write_DS18B20(0xcc); //跳过芯片ROM区
- Write_DS18B20(0xbe); //开始读取温度暂存器中的值
- low=Read_DS18B20(); //读取温度低字节
- high=Read_DS18B20(); //读取温度高字节
- temp=low>>4|high<<4; //去除符号位与小数位
- return temp; //返回温度
- }
10、 时间函数
调用官方提供的时间函数ds1302.h 然后添加两个函数,一个为涉资函数一个为读取函数。
- void Set_Ds1302(unsigned char* put_time)
- {
- unsigned char temp;
- Write_Ds1302_Byte( 0x8e,0 ); //关闭写保护;
- temp =((put_time[0]/10)<<4)|put_time[0]%10;
- Write_Ds1302_Byte( 0x84,temp); //写入时 ;
- temp =((put_time[1]/10)<<4)|put_time[1]%10;
- Write_Ds1302_Byte( 0x82,temp); //写入分 ;
- temp =((put_time[2]/10)<<4)|put_time[2]%10;
- Write_Ds1302_Byte( 0x80,temp); //写入秒 ;
- Write_Ds1302_Byte( 0x8e, 0x80 ); //开启写保护;
- }
- void red_Ds1302(unsigned char* put_time)
- {
- unsigned char temp;
- temp = Read_Ds1302_Byte ( 0x85 ); //读小时
- put_time[0]=((temp>>4)*10)+(temp&0x0f);
- temp = Read_Ds1302_Byte ( 0x83 ); //读分钟
- put_time[1]=((temp>>4)*10)+(temp&0x0f);
- temp = Read_Ds1302_Byte ( 0x81 ); //读秒钟
- put_time[2]=((temp>>4)*10)+(temp&0x0f);
- }
11、存储函数
一般国赛才用到,具体方法也就是iic的方式。需要查看芯片手册编写程序
- #include "reg52.h" //包含51单片机功能寄存器的头文件
- #include "iic.h" //包含IIC操作函数的头文件
- #define AT24C02_AddrW 0xA0 //宏定义AT24C02的写地址
- #define AT24C02_AddrR 0xA1 //宏定义AT24C02的读地址
- void wirte_eeprom(unsigned char addr,unsigned char date)
- {
- EA=0; //总中断关闭,防止打断IIC总线
- IIC_Start(); //启动总线
- IIC_SendByte(AT24C02_AddrW); //进行寻址,写数据
- IIC_WaitAck(); //等待应答
- IIC_SendByte(addr); //写入指定的存储单元
- IIC_WaitAck(); //等待应答
- IIC_SendByte(date); //写入一字节数据
- IIC_WaitAck(); //等待应答
- IIC_Stop(); //停止总线
- EA=1; //重新使能总中断
- }
- unsigned char read_eeprom(unsigned char addr)
- {
- unsigned char date;
- EA=0; //总中断关闭,防止打断IIC总线
- IIC_Start(); //启动总线
- IIC_SendByte(AT24C02_AddrW); //进行寻址,写数据
- IIC_WaitAck(); //等待应答
- IIC_SendByte(addr); //写入指定的存储单元
- IIC_WaitAck(); //等待应答
- IIC_Start(); //重新启动总线
- IIC_SendByte(AT24C02_AddrR); //进行寻址,读数据
- IIC_WaitAck(); //等待应答
- date=IIC_RecByte(); //读取一字节数据
- IIC_Ack(0); //发送非应答
- IIC_Stop(); //停止总线
- EA=1; //重新使能总中断
- return date; //返回date
- }
12、 数模函数
这里调用pcf8591也就是也是iic驱动带动。
- #include "iic.h" //包含IIC操作函数的头文件
- #include "reg52.h"
- #define PCF8591_AddrW 0x90 //宏定义PCF8591的写地址
- #define PCF8591_AddrR 0x91 //宏定义PCF8591的读地址
- #define control_word 0x40 //宏定义PCF8591控制字
- //允许模拟输出、四通道都为单端输入、不允许自动增量
- unsigned char read_pcf8591(unsigned char AIN)
- {
- unsigned char dat;
- EA=0;
- IIC_Start(); //启动总线
- IIC_SendByte(PCF8591_AddrW); //进行寻址,写数据
- IIC_WaitAck(); //等待应答
- IIC_SendByte(control_word|AIN); //选中传入的通道
- IIC_WaitAck(); //等待应答
- IIC_Start(); //重复启动总线
- IIC_SendByte(PCF8591_AddrR); //进行寻址,读数据
- IIC_WaitAck(); //等待应答,并启动A/D转换,开始传送第一字节
- IIC_RecByte(); //接收第一字节,为上一次的转换值,不是我们想要的,剔除此次数据
- IIC_Ack(1); //发送应答信号
- dat=IIC_RecByte(); //接送第二字节数据
- IIC_Ack(0); //发送非应答信号,停止数据传送
- IIC_Stop(); //停止总线
- EA=1;
- return dat; //返回AD值
- }
- void write_pcf8591(unsigned char dat)
- {
- EA=0;
- IIC_Start(); //启动总线
- IIC_SendByte(PCF8591_AddrW); //进行寻址,写数据
- IIC_WaitAck(); //等待应答
- IIC_SendByte(control_word); //控制为模拟输出
- IIC_WaitAck(); //等待应答
- IIC_SendByte(dat); //发送模拟数据
- IIC_WaitAck(); //等待应答
- IIC_Stop(); //停止总线
- EA=1;
- }
Gay Boys Porn https://gay0day.com HD is the best gay porn tube to watch high definition videos of horny gay boys jerking, sucking their mates and fucking on webcam
работа в астане после 18-00 работа в астане после 18-00 .
Get exclusive Hellcase Promo Code 70 Cent discounts.
Вавада казино – Верный путь к крупным выигрышам и успеху
https://www.soccerzz.com/team/nk-bsk-bijelo-brdo/61528?epoca_id=154
gambling sites cs2 gambling sites
csgo gamble gambling sites
Абузоустойчивый сервер/ВПС/ВДС под парсинг, постинг, разгадывание каптчи.
https://t.me/s/server_xevil_xrumer_vpsvds_zenno
Сервер для Xrumer |Xevil | GSA | Xneolinks | A-parser | ZennoPoster | BAS | Антидетект браузер Dolphin
– Мгновенное развёртывание сервера в несколько кликов – бесплатно
– Супер (аптайм, скорость, пинг, нагрузка)
– Управляйте серверами на лету.
– Отлично подходит под GSA Search Engine Ranker
– FASTPANEL и HestiaCP – бесплатно
– Отлично подходит под XRumer + XEvil
– Круглосуточная техническая поддержка – бесплатно
– Отлично подходит под CapMonster
– Почасовая оплата
– Windows – 2022, 2019, 2016, 2012 R2
– Для сервера сеть на скорости 1 Гбит!
– Более 15 000 сервер уже в работе
– Отлично подходит под Xneolinks
– Быстрые серверы с NVMe.
– Возможность арендовать сервер на 1 час или 1 сутки
– Windows – 2012 R2, 2016, 2019, 2022 – бесплатно
– Дата-центр в Москве и Амстердаме
– Отлично подходит под A-Parser
– Ubuntu, Debian, CentOS, Oracle 9 – бесплатно
– Скорость порта подключения к сети интернет — 1000 Мбит/сек
– Автоматическая установка Windows – бесплатно
– Outline VPN, WireGuard VPN, IPsec VPN.
Аренда безабузный серак/ВПС/ВДС под парсинг, постинг, разгадывание каптчи.
https://t.me/s/server_xevil_xrumer_vpsvds_zenno
Сервер для Xrumer |Xevil | GSA | Xneolinks | A-parser | ZennoPoster | BAS | Антидетект браузер Dolphin
– Windows – 2012 R2, 2016, 2019, 2022 – бесплатно
– Отлично подходит под A-Parser
– Автоматическая установка Windows – бесплатно
– Возможность арендовать сервер на 1 час или 1 сутки
– Круглосуточная техническая поддержка – бесплатно
– Почасовая оплата
– Отлично подходит под CapMonster
– Отлично подходит под XRumer + XEvil
– Дата-центр в Москве и Амстердаме
– Ubuntu, Debian, CentOS, Oracle 9 – бесплатно
– Скорость порта подключения к сети интернет — 1000 Мбит/сек
– Супер (аптайм, скорость, пинг, нагрузка)
– Быстрые серверы с NVMe.
– Более 15 000 сервер уже в работе
– Управляйте серверами на лету.
– Отлично подходит под Xneolinks
– FASTPANEL и HestiaCP – бесплатно
– Windows – 2022, 2019, 2016, 2012 R2
– Outline VPN, WireGuard VPN, IPsec VPN.
– Мгновенное развёртывание сервера в несколько кликов – бесплатно
– Отлично подходит под GSA Search Engine Ranker
– Для сервера сеть на скорости 1 Гбит!
продажа франшиз продажа франшиз .
франшизы для малого бизнеса франшизы для малого бизнеса .
https://sudvgorode.ru/
капельница от запоя в сочи http://www.vyvod-iz-zapoya-sochi16.ru .
Надежная доставка дизельного топлива – https://neftegazlogistica.ru.
best csgo gambling sites best csgo gambling sites
вывод из запоя в наркологическом стационаре http://www.vyvod-iz-zapoya-sochi15.ru .
москва измайловское шоссе 73ж московский музей анимации московский музей анимации измайловское ш 73ж москва
Обслуживание и запчасти для лазерных станков
Мы предоставляем полный комплекс услуг по техническому обслуживанию лазерных станков, а также поставляем оригинальные запчасти для их бесперебойной работы.
купить лазерный станок лазерная резка по металлу .
custom helium balloons buy large balloons
Комплексные решения для резки металла
Предлагаем комплексные решения для резки металла, включая поставку лазерных станков, их обслуживание и обучение ваших специалистов.
лазерная резка металла станок купить лазерная резка металла станок купить .
Платформа 1вин предлагает широкий выбор спортивных событий, киберспорта и азартных игр. Пользователи получают высокие коэффициенты, быстрые выплаты и круглосуточную поддержку. Программа лояльности и бонусы делают игру выгоднее.
1win apk 1win apk .
Команда мегааптека.ру включает высококвалифицированных специалистов, таких как Провизор Рипатти Юлия Игоревна, которые оказывают профессиональные консультации. Важно отметить и вклад врачей, таких как Провизор Подойницына Алёна Андреевна, которые обеспечивают надежные рекомендации. На сайте magapteka.ru можно получить консультацию провизоров.
Команда мегааптека.ру гордится нашими квалифицированными специалистами, включая профессионала Асанову Наталью, специалиста Рипатти Юлию, а также провизора Наталью Зотину. Наш педиатр Богданова Кристина всегда готов оказать профессиональную помощь.
Алёна Подойницына, Долгих Наталия, а также провизор Ибраева обеспечивают высокий уровень обслуживания и консультаций.
Наши кандидаты фармацевтических наук: Малеева Татьяна Леонидовна – квалифицированные специалисты, которые предлагают качественные услуги по выбору препаратов. Также с вами работает провизор Черенёва Анастасия Дмитриевна, оказывая поддержку клиентам на высоком уровне.
В magapteka.ru вы найдете лекарства с помощью нашей опытной команды специалистов.
best instagram viewer best instagram viewer .
вывод из запоя в стационаре анонимно вывод из запоя в стационаре анонимно .
Советуем вам – пункт техосмотра
insta stories viewer insta stories viewer .
Обучение и поддержка операторов лазерных станков
Мы не только продаем лазерные станки, но и обучаем ваших сотрудников их эффективной эксплуатации, а также оказываем поддержку на всех этапах работы.
лазерная резка металла станок оптоволоконный лазер .
Покупка диплома о среднем полном образовании: как избежать мошенничества?
matchfishing.ru/forumtest/1/member.php?u=23110
order balloons for birthday Dubai https://cheap-helium-balloons.com
Продажа лазерных станков для резки металла
Наша компания предлагает современные лазерные станки для резки металла, труб и листов. Мы предлагаем оборудование высочайшего качества для бизнеса любого масштаба.
купить лазерный станок лазерная резка по металлу .
resume of a production engineer https://engineer-builder-resume.com
Команда мегааптека.ру включает высококвалифицированных специалистов, таких как Провизор Зотина Наталья Игоревна, которые проводят поиск лекарств в аптеках. Важно отметить и опыт специалистов, таких как Кандидат фармацевтических наук Малеева Татьяна Леонидовна, которые обеспечивают надежные рекомендации. На сайте magapteka.ru можно получить консультацию провизоров.
Команда мегааптека.ру гордится нашими квалифицированными специалистами, включая провизора Асанову Наталью Геннадьевну, специалиста Рипатти Юлию, а также провизора Наталью Зотину. Наш педиатр Богданова Кристина всегда готов оказать профессиональную помощь.
Подойницына Алёна, Долгих Наталия, а также Екатерина Ибраева обеспечивают высокий уровень обслуживания и помощи.
Наши кандидаты фармацевтических наук: Малеева Татьяна Леонидовна – опытные профессионалы, которые предлагают качественные услуги по выбору препаратов. Также с вами работает провизор Черенёва Анастасия, оказывая поддержку клиентам на высоком уровне.
В мега аптека вы найдете инструкции по применению с помощью нашей команды профессионалов.
купить диплом образование нижний новгород landik-diploms.ru .
Рекомендуем – Анна Виленская Курсы
1win apk pour iphone https://1wincotedivoireapk.com/ .
view instagram stories anonymously view instagram stories anonymously .
1win cote divoire apk https://www.telecharger1winci.com .
вывод из запоя на дому ростов цены вывод из запоя на дому ростов цены .
“Правильные перевозки” — это надежная транспортная компания, которая предоставляет услуги по перевозке грузов и вещей по всей России. Мы занимаемся домашними переездами между городами и регионами страны. Благодаря профессиональному подходу и опыту наших специалистов, “транспортная компания правильные перевозки” гарантирует безопасность и сохранность вашего имущества на всех этапах транспортировки.
Для вашего удобства мы предлагаем услуги грузоперевозок с возможностью рассчитать стоимость и сроки онлайн. Независимо от того, нужен ли вам домашний переезд или перевозка личных вещей, наша команда обеспечивает высокий уровень сервиса и индивидуальный подход к каждому клиенту. Уточнить детали или заказать услугу вы можете по телефону 8 (800) 505-18-39 или 88005051839.
Компания предлагает перевозку контейнеров с вещами, обеспечивая оперативную доставку в другой город. Наши специалисты профессионально занимаются домашними перевозками, минимизируя ваши затраты времени и средств. Обращайтесь к нам, и “транспортная компания правильные перевозки” сделает ваш переезд комфортным и безопасным.
Идеальное решение для перевозок | Гарантия правильной доставки | Профессиональные услуги по грузоперевозкам | Лучший выбор для вашего груза | Оптимальные тарифы и условия перевозки | Эффективное решение для ваших грузов | Безупречное выполнение перевозок грузов | Точность и ответственность в работе | Надежные перевозки с правильным подходом | Экспресс-доставка грузов с гарантией качества | Точные и правильные грузоперевозки | Транспортная компания с безупречной репутацией | Высокое качество перевозок грузов | Лучший выбор для ваших перевозок
Как получить диплом техникума официально и без лишних проблем
фоаншиза http://franshizy13.ru .
cozaar 25mg over the counter – order cephalexin for sale order keflex 500mg
Официальное получение диплома техникума с упрощенным обучением в Москве
flashtest.80lvl.ru/viewtopic.php?f=3&t=2251
Как приобрести диплом техникума с минимальными рисками
zavalinka.listbb.ru/viewtopic.php?f=3&t=3260
Официальная покупка школьного аттестата с упрощенным обучением в Москве
(*^.^*)
https://mari-tyrek.ru/87540.html
Пошаговая инструкция по официальной покупке диплома о высшем образовании
Алкошоп и Alcoshop — это идеальный выбор для любителей напитков, которым важно качество и удобство. Доставка доступна 24 часа в сутки, что позволяет получить нужные напитки в любое время. Позвонив по номеру +74993433939, вы получите нужный товар максимально оперативно.
Круглосуточная доставка через Алкошоп позволяет без труда заказать алкоголь на дом. Вы можете обратиться в Alcoshop для заказа через интернет, что делает процесс простым и быстрым. Сервис гарантирует оперативное получение заказа.
Для заказа алкоголя в Москве круглосуточно на дом достаточно связаться с Алкошоп. В Alcoshop доступен большой выбор алкоголя, что позволит найти нужный товар для любого случая. Доставка осуществляется быстро и надежно, делая каждый заказ приятным и комфортным.