c语言单片机编程教程,C语言单片机编程,求大神帮忙
c语言单片机编程教程,C语言单片机编程,求大神帮忙详细介绍
本文目录一览: 单片机C语言编程教程
你应该先学c语言,可以看谭浩强老师的<
>,在曲看单片机的书,一步一步来,不着急的。基础好了,什么都好说。
如果你没学微机原理建议你先学
学完之后,买本上海马潮的书,一个星期就
可以懂了~
不同意 无谓之光 的。《C程序设计》确实创造了一时的辉煌,而且这种辉煌很有可能会延续,但是并不代表它是最好的。此书之所以爆红是因为当时学C无门,而这本书浅显易懂。但现在这本书太落后了,就连第3版中还是用的老标准,而现在大家一般都用C99标准。老标准在DEV C++里都编译不过。而且看样子提问者应该是了解C的基础的,我推荐《单片机C语言编程与实例》这本书。直接搜索可以找到PDF版的下载。
--------------------
Mark TeaError
看谭浩强老师的<
>,清华大学出版的饿
单片机c语言编程入门教程说难不难,说易不易,学习单片机c语言首先就要明白这两样东西是啥?单片机入门编程主要是学C语言,其次就是电路跟编程语言。
单片机c语言编程学习必看的关于模电,数电,电路这三本书,为接下来的学习做铺垫。看书的目的是因为网上的教程太多太混杂,容易带偏,做单片机软件开发其实只要看得懂电路原理就可以了。
简介
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。
概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
从二十世纪九十年代开始,单片机技术就已经发展起来,随着时代的进步与科技的发展,目前该技术的实践应用日渐成熟,单片机被广泛应用于各个领域。现如今,人们越来越重视单片机在智能电子技术方面的开发和应用,单片机的发展进入到新的时期。
无论是自动测量还是智能仪表的实践,都能看到单片机技术的身影。当前工业发展进程中,电子行业属于新兴产业,工业生产中人们将电子信息技术成功运用,让电子信息技术与单片机技术相融合,有效提高了单片机应用效果。
作为计算机技术中的一个分支,单片机技术在电子产品领域的应用,丰富了电子产品的功能,也为智能化电子设备的开发和应用提供了新的出路,实现了智能化电子设备的创新与发展。
以上内容参考:百度百科-单片机
怎样学好单片机C语言编程?
实践出真知!
找一本好书,多实践。
51单片机快速入门
首先,买一块入门级的单片机实验板,几十元一块的即可,不要一下子就买贵的。
然后就可以开始学习了。
第一课 安装软件
1.1 安装KEIL C51
1.2 安装PROTEUS
第二课 下载程序
2.1 购买板子时有提供的程序,先下载一个最简单的,如单灯闪烁等。
2.2 再下载一个略为复杂的,如电子时钟等。
第三课 修改程序
3.1 修改一个最简单的程序并下载
3.2 修改一个略为复杂的程序并下载
第四课 单片机硬件知识学习
3.1 芯片硬件知识学习
3.2 最小系统硬件知识学习
第五课 程序设计训练
5.1 方波信号发生器
5.2 彩灯控制器
。。。。。。
至此,你已经入门了,以后就可以按现在的教材循序渐进了。
当然,理论联系实际是必须的。
单片机c语言编程
具体程序不写。原理为了更好的控制六个灯可以加一个译码器,单片机控制译码器的引脚C.B.A,灯与译码器的引脚连接(比如Y0-Y7依次连接)。在While中检测键盘的输入,然后根据键盘输入确定送给译码器的数值。比如说当检测到按下的是开关键时,可以设置一个判断标示。true时送给CBA为111,那么灯全亮。false时给000.
//P0.0~P0.5接LED灯,P1.0开关键,P1.1增加,P1.2减少
#include
unsigned char QT;
unsigned char ledtab={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0};
delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i
<x;i++)
for(j=0;j<125;j++);
}
main()
{
unsigned key,number;
P0=0xff;
QT=0x00;
number=0x0;
while(1)
{
key=P1 & 0x07;
if(key!=0)
{
delay(10);
if(key==(P1&0x07))
{
switch(key)
{
case 0x01:
QT=~QT;
if(QT==0)
{
P1=0xff;
}
P0=ledtab[number];
break;
case 0x02:
number++;
if(number>5)number=0;
P0=ledtab[number];
break;
case 0x04:
number--;
if(number<0)number=5;
P0=ledtab[number];
break;
default:break;
}
}
}
}
}
#include
unsigned int ch=0x0001;sbit k1=P1^0;//开关 需要按下开关才能开始工作sbit k2=P1^1;//开关2 代表灯的位置向右移动增加 sbit k3=P1^2;//开关3 代表灯的位置向左移动void delay(){ unsigned int i; i=6000;while(i--);}void main(){ while(1) { P2=ch%0x100; if(k1==0) { if(k2==0) { delay(); ch=ch<<1; if(ch==0x0100){ch=0x0001;} while(k2==0); delay(); } if(k3==0) { delay(); ch=ch>>1; if(ch==0x0000){ch=0x0080;} while(k3==0); delay(); } } }
}
如下是仿真图
单片机的外部结构:
DIP40双列直插;
P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)
电源VCC(PIN40)和地线GND(PIN20);
高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)
内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)
程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)
P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1
单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)
四个8位通用I/O端口,对应引脚P0、P1、P2和P3;
两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)
一个串行通信接口;(SCON,SBUF)
一个中断控制器;(IE,IP)
针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。
C语言编程基础:
十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。
如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。
++var表示对变量var先增一;var—表示对变量后减一。
x |= 0x0f;表示为 x = x | 0x0f;
TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。
While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}
在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)
#include
//该头文档中有单片机内部资源的符号化定义,其中包含P1.3
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC
While( 1 ); //死循环,相当 LOOP: goto LOOP;
}
注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。
在某引脚输出低电平的编程方法:(比如P2.7引脚)
#include
//该头文档中有单片机内部资源的符号化定义,其中包含P2.7
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口。
{
P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND
While( 1 ); //死循环,相当 LOOP: goto LOOP;
}
在某引脚输出方波编程方法:(比如P3.1引脚)
#include
//该头文档中有单片机内部资源的符号化定义,其中包含P3.1
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{
P3_1 = 1; //给P3_1赋值1,引脚P3.1就能输出高电平VCC
P3_1 = 0; //给P3_1赋值0,引脚P3.1就能输出低电平GND
} //由于一直为真,所以不断输出高、低、高、低……,从而形成方波
}
将某引脚的输入电平取反后,从另一个引脚输出:( 比如 P0.4 = NOT( P1.1) )
#include
//该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.1
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P1_1 = 1; //初始化。P1.1作为输入,必须输出高电平
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{
if( P1_1 == 1 ) //读取P1.1,就是认为P1.1为输入,如果P1.1输入高电平VCC
{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND
else //否则P1.1输入为低电平GND
//{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND
{ P0_4 = 1; } //给P0_4赋值1,引脚P0.4就能输出高电平VCC
} //由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平
}
将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 P2 = NOT( P3 ) )
#include
//该头文档中有单片机内部资源的符号化定义,其中包含P2和P3
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P3 = 0xff; //初始化。P3作为输入,必须输出高电平,同时给P3口的8个引脚输出高电平
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{ //取反的方法是异或1,而不取反的方法则是异或0
P2 = P3^0x0f //读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出
} //由于一直为真,所以不断将P3取反输出到P2
}
注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。
</x;i++)
单片机C语言编程
#include
#define uint unsigned int
sbit button1=P1^0;
sbit button2=P1^1;
sbit led1=P0^0;
sbit led2=P0^1;
sbit mc1=P2^0;
sbit mc2=P2^1;
uint d1=0,d2=0;
uint jd1,jd2;
void t0isr() interrupt 1
{
led1=0;
TR0=0;
mc1=0;
}
void t1isr() interrupt 3
{
led2=0;
TR1=0;
mc2=0;
}
main()
{
TMOD=0x55;
TH0=0;
TL0=0;
TH1=0;
TL1=0;
ET0=1;
ET1=1;
EA=1;
led1=1;
led2=1;
mc1=0;
mc2=0;
while(1)
{
if(button1==0){while(button1==0);TR0=1;led1=1;mc1=1;}
if(button2==0){while(button2==0);TR1=1;led2=1;mc2=1;}
jd1=360*((TH0*256+TL0)%1024)/1024;
jd2=360*((TH1*256+TL1)%1024)/1024;
}
}
哦,将R1和R3的10K改成500欧姆
太简单,都不好意思出手。。。。O(∩_∩)O~
C语言单片机编程,求大神帮忙
//单片机4*4键盘+LED数码管,仿真实例可以参考一下,138片选.
#include
#define uchar unsigned char
uchar temp;
int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
unsigned char ledx[8];
bit s0,s1;
void delay(uchar z)
{
uchar i,j;
for(i=0;i<120;i++)
for(j=0;j
<z;j++);
}
void scan() //要是按键了,扫描键盘编码值
{
P1=0xF0;
delay(1);
temp=P1;
switch(temp)
{
case 0xe0: key1=0;
break;
case 0xd0: key1=1;
break;
case 0xb0: key1=2;
break;
case 0x70: key1=3;
break;
}
P1=0x0f;
delay(1);
temp=P1;
switch(temp)
{
case 0x0E: key=key1+0;
break;
case 0x0D: key=key1+4;
break;
case 0x0B: key=key1+8;
break;
case 0x07: key=key1+12;
break;
default : key=-1;
}
if((key1+1)&&(key+1)) disbuf=key;
}
void ejjc() //判断是否按键
{
P1=0xF0;
if(P1!=0xF0) { scan();s0=1;}
else { s0=0; s1=1;}
}
void main()
{
uchar i;
while(1)
{
ejjc();
if(s0==1 && s1==1)
{
s0=0;s1=0;
for(i=0;i<8;i++)
{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }
}
P0=0xff;
P2=LED7Code[ledx[0]];
P0=0xf0;
delay(5);
P0=0xff;
P2=LED7Code[ledx[1]];
P0=0xf1;
delay(5);
P0=0xff;
P2=LED7Code[ledx[2]];
P0=0xf2;
delay(5);
P0=0xff;
P2=LED7Code[ledx[3]];
P0=0xf3;
delay(5);
P0=0xff;
P2=LED7Code[ledx[4]];
P0=0xf4;
delay(5);
P0=0xff;
P2=LED7Code[ledx[5]];
P0=0xf5;
delay(5);
P0=0xff;
P2=LED7Code[ledx[6]];
P0=0xf6;
delay(5);
P0=0xff;
P2=LED7Code[ledx[7]];
P0=0xf7;
delay(5);
}
}
</z;j++);
C语言编写单片机89C51初始化程序
方法类似,补写程序如下:
#include
#define
uint
unsigned
int
#define
uchar
unsigned
char
sbit
led=p0^0;
sbit
led1=p0^1;
void
delay1ms
(uint
z)
{
uint
x,y;
for
(x=z;x>0;x--)
for
(y=110;y>0;y--);
}
void
exter()
interrupt
2
{
delay1ms(600);
led=0;
delay1ms(200);
led=1;
}
void
exter0()
interrupt
0
{
delay1ms(600);
led1=1;
delay1ms(200);
led1=0;
}
main()
{
ea=1;
//开总中断
ex1=1;
//开外部中断1
ex0=1;
//开外部中断0
it1=0;
//外部中断边沿触发,下降沿触发
it0=0;
//外部中断0边沿触发,下降沿触发
}
新概念51单片机C语言教程的作品目录
第1篇入门篇1.1单片机概述1.1.1什么是单片机1.1.2单片机标号信息及封装类型1.1.3单片机能做什么1.1.4如何开始学习单片机1.251单片机外部引脚介绍1.3电平特性1.4二进制与十六进制1.4.1二进制1.4.2十六进制1.5二进制的逻辑运算1.5.1与1.5.2或1.5.3非1.5.4同或1.5.5异或1.6单片机的C51基础知识介绍1.6.1利用C语言开发单片机的优点1.6.2C51中的基本数据类型1.6.3C51数据类型扩充定义1.6.4C51中常用的头文件1.6.5C51中的运算符1.6.6C51中的基础语句1.6.7学习单片机应该掌握的主要内容2.1Keil工程建立及常用按钮介绍2.1.1Keil工程的建立2.1.2常用按钮介绍2.2点亮第一个发光二极管2.3while语句2.4for语句及简单延时语句2.5Keil仿真及延时语句的精确计算2.6不带参数函数的写法及调用2.7带参数函数的写法及调用2.8利用C51库函数实现流水灯第2篇内外部资源操作篇3.1数码管显示原理3.2数码管静态显示3.3数码管动态显示3.4中断概念3.5单片机的定时器中断4.1独立键盘检测4.2矩阵键盘检测5.1模拟量与数字量概述5.2A/D转换原理及参数指标5.3ADC0804工作原理及其实现方法5.4D/A转换原理及其参数指标5.5DAC0832工作原理及实现方法5.6DAC0832输出电流转换成电压的方法第6章串行口通信原理及操作流程6.1并行与串行基本通信方式6.2RS-232电平与TTL电平的转换6.3波特率与定时器初值的关系6.451单片机串行口结构描述6.5串行口方式1编程与实现6.6串行口打印在调试程序中的应用第7章通用型1602,12232,12864液晶操作方法7.1液晶概述7.2常用1602液晶操作实例7.3常用12232液晶操作实例7.4常用12864液晶操作实例第8章I2C总线AT24C02芯片应用8.1I2C总线概述8.2单片机模拟I2C总线通信8.3E2PROMAT24C02与单片机的通信实例第9章基础运放电路专题9.1运放概述及参数介绍9.2反相放大器9.3同相放大器9.4电压跟随器9.5加法器9.6差分放大器9.7微分器9.8积分器第3篇提高篇第10章定时器/计数器应用提高10.1方式0应用10.2方式2应用10.3方式3应用10.452单片机定时器2介绍10.5计数器应用第11章串行口应用提高11.1方式0应用11.2方式2和方式3应用11.3单片机双机通信11.4单片机多机通信第12章指针12.1指针与指针变量12.1.1内存单元、地址和指针12.1.2指针变量的定义、赋值与引用12.2指针变量的运算12.3指针与数组12.3.1指针与一维数组12.3.2指针与多维数组12.4指针与函数12.4.1指针作为函数的参数12.4.2指向函数的指针12.4.3指针型函数12.5指针与字符串12.5.1字符串的表达形式12.5.2字符指针作为函数参数12.5.3 使用字符指针与字符数组的区别12.6指针数组与命令行参数12.6.1 指针数组的定义和使用12.6.2指向指针的指针12.6.3 指针数组作为main()函数的命令行参数12.7指针小结12.7.1指针概念综述12.7.2指针运算小结12.7.3等价表达式12.8C51中指针的使用12.8.1指针变量的定义12.8.2指针应用第13章STC系列51单片机功能介绍13.1单片机空闲与掉电模式应用13.2“看门狗”概念及其应用13.3用软件实现系统复位13.4内部扩展RAM的应用13.5扩展P4口的应用13.6内部E2PROM的应用13.7STC89系列单片机内部A/D应用13.8STC12系列单片机内部A/D应用13.9STC12系列单片机的PCA/PWM介绍13.10STC12系列单片机的SPI接口介绍13.11STC12系列单片机的“576MHz”超速运行第4篇实战篇第14章利用51单片机的定时器设计一个时钟14.1如何从矩阵键盘中分解出独立按键14.2原理图分析14.3实例讲解第15章使用DS12C887时钟芯片设计高精度时钟15.1时钟芯片概述15.2DS12C887时钟芯片介绍15.3如何用TX-1C实验板扩展本实验15.4原理图分析15.5实例讲解第16章使用DS18B20温度传感器设计温控系统16.1温度传感器概述16.2DS18B20温度传感器介绍16.3实例讲解第17章太阳能充/放电控制器17.1控制器原理图分析17.2控制器板上元件介绍17.3实例讲解第18章VC、VB(MSCOMM控件)与单片机通信实现温度显示18.1VCMSCOMM控件与单片机通信实现温度显示18.2VBMSCOMM控件与单片机通信实现温度显示第5篇拓展篇第19章使用Protell99绘制电路图全过程19.1绘制电路板概述19.2建立工程19.3制作元件库19.4添加封装及制作PCB封装库19.5错误检查及生成PCB19.6布线电气特性设置19.7自动布线和手动布线第20章ISD400x系列语音芯片应用20.1ISD400x系列语音芯片介绍20.2ISD400x系列语音芯片操作规则20.3ISD400x系列语音芯片应用实现第21章电机专题21.1直流电机原理及应用21.2步进电机原理及应用21.3舵机原理及其应用第22章常用元器件介绍22.1二极管22.2电容22.3场效应管22.4光耦22.5蜂鸣器22.6继电器22.7自恢复保险22.8瞬态电压抑制器22.9晶闸管(可控硅)22.10电荷泵第23章直流稳压电源专题23.1整流电路23.2滤波电路23.3稳压电路23.4集成稳压模块的使用23.5串联开关型稳压电源第24章运放扩展专题24.1简单低通滤波器24.2“电流-电压”转换电路24.3光电放大器24.4精密电流源24.5可调参考电压源24.6复位稳定放大器24.7模拟乘法器24.8全波整流器和平均值滤波器24.9正弦波振荡器24.10三角波发生器24.11自动跟踪对称电源24.12可调实验电源24.13运放相关术语表附录A天祥电子开发实验板简介A.1TX-1C51单片机开发板(配套详细视频教程)A.2AVR单片机开发板(配套详细视频教程)A.3PIC单片机开发板(配套详细视频教程)A.4J-Link全功能ARM仿真器A.5三星S3C44B0ARM7入门级开发板A.6三星S3C44B0ARM7提高级开发板A.7TX-51STAR51单片机开发板(配套详细视频教程)参考文献
怎样学习单片机c语言
首先要有一定的编程能力,其次买一本好的单片机c语言的书,如《单片机语言c51典型应用》、《8051系列单片机c程序设计完全手册》、这两本书都不错,有条件的话就买个开发板编程下程序来显示下。最好多做一些小东西,一开始不会没事,只要能看懂例程,并且能改程序用到自己的项目中,慢慢来就行.
《郭天祥十天学会单片机和c语言编》,电驴上有下载。
去长沙英腾嵌入式培训中心去学吧
1,楼主,你首先要学习C语言基础,就相当于80%会单片机了,因为现在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C语言。
2,先看内核8051的单片机:台湾宏晶的STC89C51-DIP40/或其它如新茂,到网上买一个开发板,价格不会超过200元。
3,看一下单片机功能:包换内部FLASH、RAM、TIMER、INT、ADC、USB、ISP/IAR等。
4,编译环境、编程软件KEIL。
5,打开开发板的例子程序,在KEIL编译,下载到板,看结果和说明是不是相符,达到这样效果时,你心里肯定很秀激动,这时你真正学会了单片机,你成功了!!!!!。
6,单片机C语言举例:
sbit SPEAK = P1^5; //IO口定义为蜂鸣器控制
如果蜂鸣器正极接电源,SPEAK =0;蜂鸣器就会响,你看就是这么简单。
unsiggne char temp;//定义TEMP为单字节变量。
sfr PORTA P1;//将P1口定义为PORTA
总结:多做开发板上的实验,你要多参与这样的项目开发,慢慢就会了。