历史上的今天
返回首页

历史上的今天

今天是:2026年01月05日(星期一)

正在发生

2023年01月05日 | 基于AT89C51单片机的万年历源程序

2023-01-05 来源:zhihu

#include //调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255

#define uint unsigned int //无符号整型 宏定义 变量范围0~65535

#include "eeprom52.h"

#include "nongli.h"

#include "intrins.h"

bit flag_200ms ;

bit flag_100ms ;

sbit beep = P3^7; //蜂鸣器定义

bit flag_beep_en;

uint clock_value; //用作闹钟用的

sbit dq = P3^1; //18b20 IO口的定义

uint temperature ; //温度变量

uchar flag_nl; //农历 阳历显示标志位

uchar menu_1,menu_2;

uchar key_time,flag_value; //用做连加的中间变量

bit key_500ms ;

uchar n_nian,n_yue,n_ri; //农历显示的函数

#include "ds1302.h"

#include "lcd1602.h"

/******************把数据保存到单片机内部eeprom中******************/

void write_eeprom()

{

SectorErase(0x2000);

byte_write(0x2000, fen1);

byte_write(0x2001, shi1);

byte_write(0x2002, open1);

byte_write(0x2058, a_a);

}

/******************把数据从单片机内部eeprom中读出来*****************/

void read_eeprom()

{

fen1 = byte_read(0x2000);

shi1 = byte_read(0x2001);

open1 = byte_read(0x2002);

a_a = byte_read(0x2058);

}

/**************开机自检eeprom初始化*****************/

void init_eeprom()

{

read_eeprom(); //先读

if(a_a != 1) //新的单片机初始单片机内问eeprom

{

fen1 = 3;

shi1 = 8;

open1 = 1;

a_a = 1;

write_eeprom(); //保存数据

}

}

/***********************18b20初始化函数*****************************/

void init_18b20()

{

bit q;

dq = 1; //把总线拿高

delay_uint(1); //15us

dq = 0; //给复位脉冲

delay_uint(80); //750us

dq = 1; //把总线拿高 等待

delay_uint(10); //110us

q = dq; //读取18b20初始化信号

delay_uint(20); //200us

dq = 1; //把总线拿高 释放总线

}

/*************写18b20内的数据***************/

void write_18b20(uchar dat)

{

uchar i;

for(i=0;i<8;i++)

{ //写数据是低位开始

dq = 0; //把总线拿低写时间隙开始

dq = dat & 0x01; //向18b20总线写数据了

delay_uint(5); // 60us

dq = 1; //释放总线

dat >>= 1;

}

}

/*************读取18b20内的数据***************/

uchar read_18b20()

{

uchar i,value;

for(i=0;i<8;i++)

{

dq = 0; //把总线拿低读时间隙开始

value >>= 1; //读数据是低位开始

dq = 1; //释放总线

if(dq == 1) //开始读写数据

value |= 0x80;

delay_uint(5); //60us 读一个时间隙最少要保持60us的时间

}

return value; //返回数据

}

/*************读取温度的值 读出来的是小数***************/

uint read_temp()

{

uint value;

uchar low; //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

init_18b20(); //初始化18b20

write_18b20(0xcc); //跳过64位ROM

write_18b20(0x44); //启动一次温度转换命令

delay_uint(50); //500us

init_18b20(); //初始化18b20

write_18b20(0xcc); //跳过64位ROM

write_18b20(0xbe); //发出读取暂存器命令

EA = 0;

low = read_18b20(); //读温度低字节

value = read_18b20(); //读温度高字节

EA = 1;

value <<= 8; //把温度的高位左移8位

value |= low; //把读出的温度低位放到value的低八位中

value *= 0.625; //转换到温度值 小数

return value; //返回读出的温度 带小数

}

/******************1ms 延时函数*******************/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

}

/******************写星期函数*******************/

void write_week(uchar hang,uchar add,uchar week)//写星期函数

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_com(0x80+0x40+add);

switch(week)

{

case 1:write_data('M');//星期数为1时,显示

write_data('O');

write_data('N');

break;

case 2:write_data('T');//星期数据为2时显示

write_data('U');

write_data('E');

break;

case 3:write_data('W');//星期数据为3时显示

write_data('E');

write_data('D');

break;

case 4:write_data('T');//星期数据为4是显示

write_data('H');

write_data('U');

break;

case 5:write_data('F');//星期数据为5时显示

write_data('R');

write_data('I');

break;

case 6:write_data('S');//星期数据为6时显示

write_data('T');

write_data('A');

break;

case 7:write_data('S');//星期数据为7时显示

write_data('U');

write_data('N');

break;

}

}

/*************时钟显示***************/

void init_1602_ds1302()

{

write_sfm2_ds1302(1,1,shi); //显示时

write_sfm2_ds1302(1,4,fen); //显示分

write_sfm2_ds1302(1,7,miao); //显示秒

write_week(2,12,week);

//write_sfm1(1,14,week); //显示星期

write_sfm3_18B20(1,11,temperature); //显示温度

if(flag_nl == 0) //显示阳历

{

write_sfm2_ds1302(2,2,nian); //显示年

write_sfm2_ds1302(2,5,yue); //显示月

write_sfm2_ds1302(2,8,ri); //显示日

}

else //显示农历

{

write_sfm2_ds1302(2,2,n_nian); //显示年

write_sfm2_ds1302(2,5,n_yue); //显示月

write_sfm2_ds1302(2,8,n_ri); //显示日

}

}

/*************定时器0初始化程序***************/

void init_time0()

{

EA = 1; //开总中断

TMOD = 0X01; //定时器0、工作方式1

ET0 = 1; //开定时器0中断

TR0 = 1; //允许定时器0定时

}

/*************闹钟报警函数***************/

void menu_dis()

{

static uchar mm,value;

if(flag_100ms == 1) //100ms执行一次

{

flag_100ms = 0;

if(open1 == 1) //如果闹钟打开

{

if((miao == 0) && (fen == fen1) && (shi == shi1))

{

flag_beep_en = 1; //有报警 打开蜂鸣器响的标志位

}

if(flag_beep_en == 1) //闹钟以被打开

{

clock_value++;

if(clock_value <= 30)

beep = ~beep; //蜂鸣器叫3秒

else if(clock_value > 30)

{

beep = 1; //蜂鸣器停1秒

if(clock_value > 40)

{

clock_value = 0;

}

}

}

// 1 分钟后自动关闭闹钟

value ++;

if(value >= 10)

{

value = 0;

mm++;

if(mm >= 60)

{

mm = 0;

flag_beep_en = 0;

beep = 1;

}

}

}

}

}

}

/********************独立按键程序*****************/

uchar key_can; //按键值

void key() //独立按键程序

{

static uchar key_new;

key_can = 20; //按键值还原

P3 |= 0x78; //对应的按键IO口输出为1

if((P3 & 0x78) != 0x78) //按键按下

{

delay_1ms(1); //按键消抖动

if(((P3 & 0x78) != 0x78) && (key_new == 1))

{ //确认是按键按下

key_new = 0;

switch(P3 & 0x78)

{

case 0x70: key_can = 4; break; //得到按键值

case 0x68: key_can = 3; break; //得到按键值

case 0x58: key_can = 2; break; //得到按键值

case 0x38: key_can = 1; break; //得到按键值

}

// write_sfm2(1,0,key_can); //显示按键值

}

}

else

key_new = 1;

}

/**********************设置函数************************/

void key_with()

{

if(key_can == 1)

{

menu_1++;

if(menu_1 == 1)

{

menu_2 = 1;

write_string(1,0," : : W: ");

write_string(2,0," 20 - - ");

}

if(menu_1 == 2)

{

menu_2 = 1;

write_string(1,0," set clock ");

write_string(2,0," Y 00:00 ");

}

if(menu_1 > 2)

{

menu_1 = 0;

write_guanbiao(1,2,0);

init_1602_dis_csf(); //初始化液晶显示

}

}

if(key_can == 2)

{

flag_200ms = 1;

if(menu_1 == 1)

{

menu_2 ++;

if(menu_2 > 7)

menu_2 = 1;

}

if(menu_1 == 2)

{

menu_2 ++;

if(menu_2 > 3)

menu_2 = 1;

}

}

if(menu_1 == 1)

{

if(menu_2 == 1)

{

if(key_can == 3)

{

shi+=0x01;

if((shi & 0x0f) >= 0x0a)

shi = (shi & 0xf0) + 0x10; ///***shi & 0xf0低四位清零,(shi & 0xf0) + 0x10向高位进1(高四位加1)***/// if(shi >= 0x24)

shi = 0;

}

if(key_can == 4)

{

if(shi == 0x00)

shi = 0x24;

if((shi & 0x0f) == 0x00)

shi = (shi | 0x0a) - 0x10; ///***如果个位为0,高四位减1***///

shi -- ;

}

}

if(menu_2 == 2)

{

if(key_can == 3)

{

fen+=0x01;

if((fen & 0x0f) >= 0x0a)

fen = (fen & 0xf0) + 0x10;

if(fen >= 0x60)

fen = 0;

}

if(key_can == 4)

{

if(fen == 0x00)

fen = 0x5a;

if((fen & 0x0f) == 0x00)

fen = (fen | 0x0a) - 0x10;

fen -- ;

}

}

if(menu_2 == 3)

{

if(key_can == 3)

{

miao+=0x01;

if((miao & 0x0f) >= 0x0a)

miao = (miao & 0xf0) + 0x10;

if(miao >= 0x60)

miao = 0;

}

if(key_can == 4)

{

if(miao == 0x00)

miao = 0x5a;

if((miao & 0x0f) == 0x00)

miao = (miao | 0x0a) - 0x10;

miao -- ;

}

}

if(menu_2 == 4)

{

if(key_can == 3)

{

week+=0x01;

if((week & 0x0f) >= 0x0a)

week = (week & 0xf0) + 0x10;

if(week >= 0x08)

week = 1;

}

if(key_can == 4)

{

if(week == 0x01)

week = 0x08;

if((week & 0x0f) == 0x00)

week = (week | 0x0a) - 0x10;

week -- ;

}

}

if(menu_2 == 5)

{

if(key_can == 3)

{

nian+=0x01;

if((nian & 0x0f) >= 0x0a)

nian = (nian & 0xf0) + 0x10;

if(nian >= 0x9a)

nian = 1;

}

if(key_can == 4)

{

if(nian == 0x01)

nian = 0x9a;

if((nian & 0x0f) == 0x00)

nian = (nian | 0x0a) - 0x10;

nian -- ;

}

}

if(menu_2 == 6)

{

if(key_can == 3)

{

yue+=0x01;

if((yue & 0x0f) >= 0x0a)

yue = (yue & 0xf0) + 0x10;

if(yue >= 0x13)

yue = 1;

}

if(key_can == 4)

{

if(yue == 0x01)

yue = 0x13;

if((yue & 0x0f) == 0x00)

yue = (yue | 0x0a) - 0x10;

yue -- ;

}

}

if(menu_2 == 7)

{

if(key_can == 3)

{

ri+=0x01;

if((ri & 0x0f) >= 0x0a)

ri = (ri & 0xf0) + 0x10;

if(ri >= 0x32)

ri = 0;

}

if(key_can == 4)

{

if(ri == 0x01)

ri = 0x32;

if((ri & 0x0f) == 0x00)

ri = (ri | 0x0a) - 0x10;

ri -- ;

}

}

write_sfm2_ds1302(1,2,shi);

write_sfm2_ds1302(1,5,fen);

write_sfm2_ds1302(1,8,miao);

write_sfm1(1,14,week);

write_sfm2_ds1302(2,3,nian);

write_sfm2_ds1302(2,6,yue);

write_sfm2_ds1302(2,9,ri);

///***write_sfm3_18B20(2,12,temperature);

switch(menu_2) // 光标显示

{

case 1: write_guanbiao(1,2,1); break;

case 2: write_guanbiao(1,5,1); break;

case 3: write_guanbiao(1,8,1); break;

case 4: write_guanbiao(1,14,1); break;

case 5: write_guanbiao(2,3,1); break;

case 6: write_guanbiao(2,6,1); break;

case 7: write_guanbiao(2,9,1); break;

}

write_time(); //把时间写进去

}

/***************设置闹钟*********************/

if(menu_1 == 2)

{

if(menu_2 == 1)

{

if(key_can == 3)

{

open1 = 1; //闹钟开

}

if(key_can == 4)

{

open1 = 0;

}

}

if(menu_2 == 2)

{

if(key_can == 3)

{

shi1+=0x01;

if((shi1 & 0x0f) >= 0x0a)

shi1 = (shi1 & 0xf0) + 0x10;

if(shi1 >= 0x24)

shi1 = 0;

}

if(key_can == 4)

{

if(shi1 == 0x00)

shi1 = 0x5a;

if((shi1 & 0x0f) == 0x00)

shi1 = (shi1 | 0x0a) - 0x10;

shi1 -- ;

}

}

if(menu_2 == 3)

{

if(key_can == 3)

{

fen1+=0x01;

if((fen1 & 0x0f) >= 0x0a)

fen1 = (fen1 & 0xf0) + 0x10;

if(fen1 >= 0x60)

fen1 = 0;

}

if(key_can == 4)

{

if(fen1 == 0x00)

fen1 = 0x5a;

if((fen1 & 0x0f) == 0x00)

fen1 = (fen1 | 0x0a) - 0x10;

fen1 -- ;

}

}

if(open1 == 1)

write_string(2,4,"Y");

else

write_string(2,4,"N");

write_sfm2_ds1302(2,7,shi1); //显示闹钟时

write_sfm2_ds1302(2,10,fen1); //显示闹钟分

switch(menu_2) // 光标显示

{

case 1: write_guanbiao(2,4,1); break;

case 2: write_guanbiao(2,7,1); break;

case 3: write_guanbiao(2,10,1); break;

}

write_eeprom(); //保存闹钟时间

}

}

/*****************主函数********************/

void main()

{

beep = 0; //开机叫一声

dP0 = P1 = P2 = P3 = 0xff; //单片机IO口初始化为1

elay_1ms(150);

init_time0(); //初始化定时器

init_ds1302(); //ds1302初始化

init_1602(); //lcd1602初始化

init_1602_dis_csf(); //lcd1602初始化显示

init_eeprom(); //开始初始化保存的数据

temperature = read_temp(); //先读出温度的值

delay_1ms(650);

temperature = read_temp(); //先读出温度的值

while(1)

{

key(); //按键程序

if(key_can < 10)

{

if(flag_beep_en == 0) //只有闹钟关了的时候才能进入设置

key_with();

else

{

flag_beep_en = 0; //按下任意键可关闭闹钟

beep = 1;

clock_value = 0;

read_time();

}

if(menu_1 == 0)

{

{

if(key_can == 4) //减键

{

flag_nl = ~flag_nl; //切换农历和阳历的显示标志位

if(flag_nl == 0)

write_string(2,0,"2016");

else

write_string(2,0,"N ");

}

}

}

if(flag_200ms == 1)

{

flag_200ms = 0;

if(menu_1 == 0)

{

read_time(); //读时间

temperature = read_temp(); //先读出温度的值

init_1602_ds1302(); //显示时钟

}

}

menu_dis(); //闹钟报警函数

delay_1ms(1);

}

}

/**************定时器0中断程序*****************/

void time0() interrupt 1

{

static uchar value;

TH0 = 0X3C;

TL0 = 0XB0; //50ms

value ++;

if((value % 2) == 0) //100ms

flag_100ms = 1;

if(value >= 6) //200ms

{

value = 0;

flag_200ms = 1;

}

}


推荐阅读

史海拾趣

Hamamatsu公司的发展小趣事

Habia Cable公司电子行业发展的五个故事

故事一:聚四氟乙烯的先驱

Habia Cable的故事始于1941年,由Carl Herbert Jacobsson在瑞典斯德哥尔摩创立。起初,公司是一家聚合物制造商,专注于胶木部件的生产。然而,Jacobsson的远见卓识使Habia成为欧洲首批使用聚四氟乙烯(PTFE)的公司之一,并在1946年在美国推出了第一款商业聚四氟乙烯产品。这一创新不仅为Habia奠定了技术基础,也使其迅速在电线电缆领域崭露头角。随着时间的推移,Habia成为最早制造聚四氟乙烯电线和电缆的公司之一,这一技术突破为公司后续的发展奠定了坚实的基础。

故事二:国际扩张的征程

自1957年Habia制造其第一条电缆以来,公司便踏上了国际扩张的征途。1969年,Habia在荷兰布雷达开设了其第一家国际销售办公室,这标志着公司正式进入全球市场。随后,Habia在70年代至80年代经历了迅速的国际扩张,工厂和销售办事处相继在法国、德国、英国、西班牙、比利时和美国等地成立或收购。这一时期的快速扩展不仅增强了Habia在全球范围内的市场竞争力,也为其后续的发展积累了宝贵的经验和资源。

故事三:技术创新的引领

Habia Cable一直以来都是技术创新的引领者。在2000年,公司收购了德国Norderstedt的高温电线和电缆制造商Isotec Kabel GmbH,这一举措使德国成为Habia最大的市场,并为其在欧洲的进一步发展提供了强有力的支持。此外,Habia Cable还不断投资于新技术和新设备的研发,以满足市场对高性能电缆和线束的需求。例如,在2016年,Habia Cable投资独特设备制造含氟聚合物电线和电缆的长截面和大截面产品,以满足离岸部门等苛刻应用的需求。

故事四:亚洲市场的布局

随着全球化进程的加速,Habia Cable也开始将目光投向亚洲市场。2000年,Habia Cable在中国常州设立工厂,生产同轴电缆,这标志着公司正式进入亚洲市场。此后,Habia在亚洲的扩张步伐不断加快,不仅在中国建立了多个生产基地,还在韩国、香港和日本等地设立了销售办事处。这些举措不仅提升了Habia在亚洲市场的知名度,也为其在全球范围内的业务增长提供了新的动力。

故事五:定制解决方案的提供

Habia Cable一直致力于为客户提供定制化的解决方案。公司拥有一支知识渊博的销售团队和设计工程师团队,他们能够与客户紧密合作,根据客户的独特需求开发满足其要求的电缆和线束产品。Habia Cable的制造灵活性、低订单数量要求和短交货周期等特点使其在市场上具有很强的竞争力。无论是电信、核电、国防还是海洋和工业领域,Habia Cable都能为客户提供高质量、高性能的电缆和线束产品,满足其苛刻的应用需求。

ZTE高新兴(Gosuncn)公司的发展小趣事

对于J-107B型高频双头式热合机电路,网友可能提出的问题及回答如下:

问题一:J-107B型高频双头式热合机的主要工作原理是什么?

回答:J-107B型高频双头式热合机的主要工作原理是利用高频电场作用于塑料材料,使其内部分子发生极化现象,并在高频电场的快速变化下,这些被极化的分子以同样极快的速度跟随变化,从而因介电损耗产生大量的热量。这些热量聚集并达到高温,使塑料材料熔化。在熔化状态下,通过施加一定的压力,可以使两块或多块塑料熔合粘结在一起,实现高频热合的目的。

问题二:J-107B型高频双头式热合机的电路结构有哪些主要部分?

回答:J-107B型高频双头式热合机的电路结构主要包括以下几个主要部分:

  1. 高频振荡电路:这是热合机的核心部分,通常由电子管(如Fu-33中功率发射电子管)组成,用于产生高频电场。电子管通过自激振荡方式工作,利用电子管的授间电容作振荡回路的主电窖,组成考毕兹振荡器。

  2. 时间控制电路:用于控制热合的时间,通常由电子管(如6P6P电子管)和时间控制元件(如RP1和RP2调节器)组成。通过调整这些元件,可以精确地控制热合过程中的各个阶段时间,如预热时间、熔合时间和冷却时间。

  3. 电源电路:为整个热合机提供稳定的电源供应,确保高频振荡电路和时间控制电路的正常工作。电源电路需要满足一定的电压和电流要求,通常要求电源电压在190~230V范围内。

  4. 保护电路:为了防止电路过载、短路等异常情况的发生,热合机还配备了保护电路。这些电路能够在检测到异常情况时迅速切断电源,保护设备和操作人员的安全。

问题三:如何维护和保养J-107B型高频双头式热合机?

回答:为了保持J-107B型高频双头式热合机的良好性能和延长使用寿命,需要进行定期的维护和保养。以下是一些建议:

  1. 定期检查电源线和插头:确保它们没有损坏或松动,避免电源问题导致的故障。

  2. 清洁机器内部:定期清理机器内部的灰尘和杂物,保持机器内部的清洁和干燥。这有助于防止电子元件因灰尘积累而损坏。

  3. 检查电子元件:定期检查高频振荡电路和时间控制电路中的电子元件是否损坏或老化。如有需要,应及时更换以确保电路的正常工作。

  4. 调整和维护模具:模具是热合机的关键部件之一,需要定期进行调整和维护。确保模具的接合位置准确、平整,避免模具损坏导致的热合质量下降。

  5. 注意安全操作:在操作过程中,应注意安全用电和防火措施。避免在潮湿或腐蚀性气体环境下使用热合机,以防止触电或设备损坏。

  6. 定期校准:对于需要精确控制时间或温度的热合机,应定期进行校准以确保其准确性。这有助于提高热合质量和生产效率。

Barkston Plastics Engineering Ltd.公司的发展小趣事

随着环保意识的日益增强,Barkston Plastics Engineering Ltd.积极响应行业趋势,致力于研发和生产环保型塑料电子元件。公司投入大量资源研发可降解和可回收的塑料材料,并将其应用于产品中。这一举措不仅赢得了客户的认可,也提升了公司的品牌形象,使其在竞争激烈的电子行业中脱颖而出。

DYMO公司的发展小趣事

DYMO公司成立于20世纪XX年代,由发明家XXX创立。XXX先生对标签打印技术的潜力有着深刻的洞察,他相信这项技术将极大地提高办公效率。他带领团队研发了第一款便携式标签打印机,这款产品以其易用性和便携性迅速赢得了市场的认可。DYMO公司的成功,从创始人XXX的远见和决心开始。

EPIC公司的发展小趣事

1998年,Epic Games发布了一款名为“虚幻”的3D第一人称射击游戏。这款游戏不仅游戏内容新颖,更引人注目的是它背后完全自主开发的3D游戏引擎。这个引擎后来被称为“虚幻引擎”,并成为了Epic Games的核心技术之一。随着游戏的成功,虚幻引擎也逐渐受到了业界的关注。许多其他游戏开发商开始采用这款引擎来开发自己的游戏,从而使得Epic Games在游戏引擎领域取得了显著的商业成功。

AverLogic公司的发展小趣事

AverLogic公司在电子行业中以其技术创新和产品突破而崭露头角。在早期的发展阶段,公司专注于研发高质量的视频处理芯片,以满足市场对于更高清晰度和更流畅视频播放的需求。经过多次实验和迭代,公司成功推出了一款具有革命性的转换器产品——AL110,这款产品能够将PC和Macintosh的VGA信号转换为高品质的NTSC或PAL信号,从而极大地提升了视频信号的处理效率和输出品质。这一创新不仅为公司赢得了市场的认可,也为公司在电子行业中奠定了坚实的基础。

问答坊 | AI 解惑

偶又来晒板了,感觉每次来水平都有点提高.

感觉自己不像某些天才,刚开始就能做出很票票的LAYOUT作品来.. 2008的第一次晒板比以往来得都晚一些, 大家一笑了之啊! …

查看全部问答>

航模电机

用51怎样驱动航模直升机的电机,需要电流太大2-3A,一般驱动板太大了,而且电流达不到,请问有什么好办法,能否用MOS管或晶闸管,做开关管?先谢谢了…

查看全部问答>

准备开NO.3方案

准备开第三种方案,做一个便携式的温度湿度检测计 大家可以看看我的方案,我主要想做一个便携式的,袖珍型的,可以挂在钥匙圈上的,所以尽量的简单,C8051F系列中选一款单片机,特点就是简单方便性能强大,再加上湿度传感器芯片和LCD液晶即可 &nb ...…

查看全部问答>

求单片机控制LED点阵屏动态显示的开发实例资料。

我现能固定显示几个字的点阵屏,要求用电脑作为上位机,随时改变内容让它显示在LED屏上。谢谢了!…

查看全部问答>

有采用STM32v3.1.0固件库的FreeRTOS的移植吗?

                                 FreeRTOS 6.0.1也是基于STM32 2.0.3固件库…

查看全部问答>

此DSP学习论坛~

这个DSP学习论坛真的很好,不仅运行速度快,论坛维护好,而且还是不是地设置了一些奖项,比如30周年DSP的征文大赛。非常好!!!这个论坛是我看到的有关DSP最好的论坛了,必须强顶!!!管理员人也不错,呵呵~~…

查看全部问答>

招聘资深应用工程师-上海

猎头公司为某外资企业招聘招聘资深应用工程师(工作地点:上海) 职责: 售前售后技术支持。 技术培训等。 要求: 熟悉通信、电子、安防等行业; 熟悉嵌入式系统开发、FPGA、HDL编码和验证、DSP数字信号处理、通讯算法等相关知识。 如果有兴 ...…

查看全部问答>

MSP430PWM脉冲占空比调节LED光亮

/*实验板 MSP430 LaunchPad * 利用定时器编写PWM电路,驱动LED,并可以通过按键调节亮度 * MCLK=SMCLK=DCOCLK=32×ACLK=1.048576MHz, */ #include void main(void) { P1DIR |= BIT6+BIT0; P1DIR &=~BIT3;     &nb ...…

查看全部问答>

EEWORLD大学堂----TI微控制器硬件驱动支持

TI微控制器硬件驱动支持:https://training.eeworld.com.cn/course/402…

查看全部问答>