单片机c语言编程入门,单片机编程问题(C语言),很入门的问题,明天比赛,急急急!多少分都可以
单片机c语言编程入门,单片机编程问题(C语言),很入门的问题,明天比赛,急急急!多少分都可以详细介绍
本文目录一览: 单片机c语言编程?
单片机C语言程序设计入门课程,说起来容易,说起来难。学习单片机C语言,首先要了解这两个东西是什么。单片机入门编程主要是学习C语言,其次是电路和编程语言。单片机C语言程序设计学习中必读的模拟电、数字电、电路三本书,为接下来的学习做铺垫。看书的目的是因为网上教程太多,容易出现偏差。其实只要能懂电路原理,就能开发单片机软件。简介单片机又称单片微控制器,不是执行某种逻辑功能的芯片,而是将一个计算机系统集成到一个芯片中。相当于一台微型计算机,与计算机相比,单片机只是缺少I/O设备。综上所述,芯片变成了电脑。它体积小、重量轻、价格低,为研究、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理和结构的最佳选择。单片机已经广泛应用于智能仪器、实时工业控制、通讯设备、导航系统、家用电器等领域。自20世纪90年代以来,单片机技术得到了发展。随着时代的进步和科技的发展,这项技术的实际应用也越来越成熟,单片机被广泛应用于各个领域。如今,人们越来越重视单片机在智能电子技术中的发展和应用,单片机的发展进入了一个新的时期。无论是自动测量的实践,还是智能仪器的实践,都可以看到单片机技术的身影。在当前的产业发展过程中,电子产业是一个新兴的产业。在工业生产中,人们已经成功地应用了电子信息技术,将电子信息技术与单片机技术相结合,有效地提高了单片机的应用效果。作为计算机技术的一个分支,单片机技术在电子产品领域的应用丰富了电子产品的功能,为智能电子设备的开发和应用提供了新的途径,实现了智能电子设备的创新和发展。以上内容参考:百度百科-单片机
你应该先学习C语言。你可以读谭浩强和单片机的书,循序渐进。别担心。基础好,什么都能说。
如果你没学过微机原理,建议你先学完再买本上海马超的书,一周就能看懂了~
不认同无意义的光。《C编程》确实创造了一时的辉煌,这种辉煌很可能会延续下去,但不代表就是最好的。这本书之所以流行,是因为当时没有办法学习C,这本书很好理解。但是现在这本书太落后了,甚至3版还在用老标准,现在大家普遍用C99标准。老标准不能用Dev C编译而且好像提问者应该知道C的基础,推荐《单片机C语言编程及实例》这本书。直接搜索就能找到PDF版本的下载。-马克·提埃洛
看谭浩强老师的。清华大学出版的《饥饿》。
单片机C语言入门的目录
第1章 MCS-51单片机概述1第2章 C51语言基本语法43第3章 C51语句73第4章 C51函数95第5章 数组117第6章 指针131第7章 结构体与联合体153第8章 预处理169第9章 KeilmVision集成开发环境178第10章 单片机内部资源及其C51编程199第11章 MCS-51单片机系统扩展225第12章 单片机外围接口技术247第13章 简单C51应用实例284……
51单片机c语言学习哪本书讲的比较详细,适合入门的看呢?
谭浩强的C语言才是王道。。前面基础的先搞懂。然后去看十天学会单片机。指针的话要到单片机进阶的话会调用到一些函数的时候会用到,到时候在学。学单片机最好买开发板来练练手啊
郭天祥的十天征服单片机视频很好,我现在就在看,适合单片机初学者,或者是天狼星的视频网上都有,这些都是老师和同学推荐的
C程序设计(第四版)谭浩强 和C程序设计(第四版)学习辅导谭浩强 要买清华大学出版的
郭天祥十天学会单片机
你可以看看《爱上单片机》(杜洋著),超简单的哦。
如果你不想买书,你可以下载《单片机编程魔法学校》,或者硬件的《单片机入门制作专辑》(其实就是从书里面截取的片段)
还可以购买视频,你到www.doyoung.net看看
其实没必要买一块开发板,也不必要自己做一块
完全可以用面包板搭建,无需焊接,拆装方便,而且真正能理解硬件电路,让自己动手实践,例如第一次试验只需要用三个元器件单片机(推荐用STC12C5A60S52,也是51内核的,完全通用,但是功能丰富,千万不要用AT89S51,以后你就会知道,比如说以后用到ADC数模转换,PWM输出,STC就都集成好了,而AT就需要一个个用芯片外扩)LED灯、电池盒三个元件,而不需要面对连电路都不熟悉的开发板。详见视频“用面包板入门单片机”:
http://www.doyoung.net/video/BREAD_1/index.html
学习C语言可以配合着《单片机入门制作专辑》(网页最后可以下载光盘及文章):
http://www.doyoung.net/articles/0711_MCU_entry_album/index.html
《单片机编程魔法学校》(最后也有下载):
http://www.doyoung.net/articles/0711_MCU_entry_album/index.html
推荐书籍:《爱上单片机》
单片机编程问题(C语言),很入门的问题,明天比赛,急急急!多少分都可以
调试了好几遍~ 没接口芯片 光单片机好麻烦啊 在我的开发板上调试成功了 12M晶振~~ 既然多少分都可以 那就使劲给吧~
#include
code unsigned char tab[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共阳数码管 0-9
unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
unsigned char second; //秒
char flag;
unsigned char shi;
void delay(unsigned int cnt)
{
while(--cnt);
}
unsigned char keyscan(void)//键盘扫描函数,使用行列反转扫描法
{
unsigned char cord_h,cord_l;//行列值
P3=0x0f; //行线输出全为0
cord_h=P3&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f; //读入列线值
P3=cord_h|0xf0; //输出当前列线值
cord_l=P3&0xf0; //读入行线值
return(cord_h+cord_l);//键盘最后组合码值并返回
}
}
return(0xff); //否则返回固定值0xff
}
void main()
{
unsigned char key,temp;
TMOD |=0x01;//定时器设置 10ms in 12M crystal
TH0=0xd8;
TL0=0xf0;
IE= 0x82; //打开中断
TR0=1;
flag=0;
Dis_Shiwei=tab[0];//十位显示值处理
Dis_Gewei=tab[0]; //个位显示处理
while(1)
{
P0=Dis_Shiwei;//显示十位
P2=0xFD;
delay(150);//短暂延时
P0=Dis_Gewei; //显示个位
P2=0xFE;
delay(150);
key=keyscan();//调用键盘扫描,
temp=-1;
if(key!=0xff){
switch(key)
{
case 0x7e:temp=0;break;//0 按下相应的键显示相对应的码值
case 0x7d:temp=1;break;//1
case 0x7b:temp=2;break;//2
case 0x77:temp=3;break;//3
case 0xbe:temp=4;break;//4
case 0xbd:temp=5;break;//5
case 0xbb:temp=6;break;//6
case 0xb7:temp=7;break;//7
case 0xde:temp=8;break;//8
case 0xdd:temp=9;break;//9
case 0xdb:temp=10;break;//a
case 0xd7:temp=11;break;//b
case 0xee:temp=12;break;//c
case 0xed:temp=13;break;//d
case 0xeb:temp=14;break;//e
case 0xe7:temp=15;break;//f
}
if(temp==10)//按下了A键
{
TR0=!TR0;
flag=!flag;
}else
if(flag==1)//按下有效键
{
second=shi*10+temp;
Dis_Shiwei=Dis_Gewei;
Dis_Gewei=tab[temp];
delay(0x7fff); //这个延时太长会在设置时显示不流畅 太短会出现连键
shi=temp;
}
}
}
}
//定时中断
void tim(void) interrupt 1 using 1
{
static unsigned char count;
TH0=0xd8;//重新赋值
TL0=0xf0;
count++;
if (count==100)
{
count=0;
second++;//秒减1
if(second>=60)
{
second=0; //减到0是重新赋值
}
Dis_Shiwei=tab[second/10];//十位显示值处理
Dis_Gewei=tab[second%10]; //个位显示处理
}
}
几本书给你
参考资料
1,MSP430系列超低功耗单片机原理与系统设计/李智奇/西安电子科技大学出版社 2008。
2,MSP430单片机C程序设计与实践/曹磊/ 北京航空航天大学出版社 2007。
3,MSP430单片机C语言应用程序设计实例精讲/秦龙/电子工业出版社 2006 。
4,MSP430系列单片机实用C语言程序设计/张晞, 王德银, 张晨/人民邮电出版社 2005。
5,MSP430系列16位超低功耗单片机实践与系统设计/沈建华, 杨艳琴, 翟骁曙/清华大学出版社 2005。
6,MSP430单片机应用系统开发典型实例/秦龙/中国电力出版社 2005。
7,MSP430系列16位超低功耗单片机原理与应用/沈建华, 杨艳琴, 翟骁曙/清华大学出版社 2004。
可以用定时判断A的状态的,一旦按键触发,就停止读秒或数码管清零,等待按键输入,当然,因为你只用到0-9显示,你也可以把A键作为一个特殊键处理的。
还没学单片机!无法回答!
下列程序已经调好,按键显示电路可见:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/ef086222268d4f4eac34de59.html
//单片机:使用51系列兼容的即可;
//4×4矩阵键盘:接在P1口;
//两位数码显示器: P0口输出七段码,P2口输出位选码。
/========================================
//C语言程序如下。
/*************************************************************
* 文件名: KEY_LED.c
* 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。
**************************************************************/
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[10] = {0xC0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
uchar sec, t_50ms;
/**************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***************************************************************/
void Delay_1ms(uint x)
{
uint i;
uchar j;
for(i = 0; i < x; i++) for(j = 0; j <= 148; j++);
}
/**************************************************************
* 名称: Display(uchar k)
* 功能: 将参数分成十位、个位分别显示
* 输入: k (键盘数值)
* 输出: P0口输出七段码,P2口输出位选码
***************************************************************/
void Display(uchar k)
{
P2 = 0; //消隐
P0 = table[k / 10];
P2 = 0x02; Delay_1ms(5); //显示5ms十位
P2 = 0; //消隐
P0 = table[k % 10];
P2 = 0x01; Delay_1ms(5); //显示5ms个位
}
/**************************************************************
* 名称: Keyscan()
* 功能: P1外接4×4按键, 按照扫描法读出键值
* 输出: 按键值0~15/如无键按下, 返回16
***************************************************************/
uchar Keyscan(void)
{
uchar i, j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
for(j = 0; j < 4; j++) { //循环四次
P1 = Buffer[j]; //在P1高四位分别输出一个低电平
temp = 0x01; //计划先判断P1.0位
for(i = 0; i < 4; i++) { //循环四次
if(!(P1 & temp)) //从P1低四位,截取1位
return (i + j * 4); //返回取得的按键值
temp <<= 1; //判断的位,左移一位
} }
return 16; //判断结束,没有键按下,返回16
} //呵呵,实质性的语句不过8行,就是这么简练!
/**************************************************************
* 名称: GetKey()
* 功能: 读出按键、消抖、等待按键释放
* 输出: 按键值0~15/如无键按下, 返回16
***************************************************************/
uchar GetKey(void)
{
uchar Key_Temp1, Key_Temp2; //两次读出的键值
P1 = 0xff;
Key_Temp1 = Keyscan(); //先读入按键
if(Key_Temp1 == 16) return 16; //没有键按下,返回16
Display(sec); //用显示代替延时
Key_Temp2 = Keyscan(); //再读一次按键
if(Key_Temp1 != Key_Temp2) return 16; //不同,返回16
while(Keyscan() < 16) //等待按键释放
Display(sec); //等待期间显示
return Key_Temp1;
}
/**************************************************************
* 名称 : Main()
* 功能 : 主函数
***************************************************************/
void Main(void)
{
uchar Key_Value; //读出的键值
sec = 0;
TMOD = 0x01;
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
TR0 = 1;
ET0 = 1;
EA = 1;
while(1) {
Display(sec); //显示
if (GetKey() == 10) {
TR0 = 0;
while (TR0 == 0) {
Display(sec); //显示
Key_Value = GetKey();
if (Key_Value < 10) {
sec %= 10;
sec = sec * 10 + Key_Value;
}
if (Key_Value == 10) TR0 = 1;
} } }
}
/**************************************************************
* 名称 : T0_INT()
* 功能 : T0中断函数
***************************************************************/
void T0_INT() interrupt 1
{
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
t_50ms++;
if(t_50ms >= 20) {
t_50ms = 0;
sec++;
sec %= 60;
}
}
/*************************************************************/
单片机学习如何入门?
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
总结:多做开发板上的实验,你要多参与这样的项目开发,慢慢就会了。
请问你是学生还是刚毕业还是已工作者?
建议可以用proteus来学习。
该软件可以搭建电路,仿真电路,编程。不需要什么成本的。
如果有条件,可以自己参照一些试验书或项目,买器件搭电路。
看郭天祥的视频,买个板子就行了,很简单的,只要用心学,几个星期就搞定了
想学好单片机其实并不困难,单片机是一门实践性非常强的的学科,学习时要理论与实践并重量,现在网上学习单片机的资料比较多,你可到有关单片机的论坛上找找,再次就是有准备必要的学习单片机的一些基本的装备,电脑你肯定有,哪就准备一些实践用的工具器件,如:单片机、相关的电子元件,有备件时购一台单片机学习板,这样的学习板附带的例程非常多,你可以边看例程边实践,这样的学习方法入门比较快,等有了一定的基础后,可以自己动手焊的些简单的板子,检验一下自己的学习效果。学习过程中要学习一定的专业知识,比如数电和模电。单片机语言就学语言C,也可用汇编,根据自己情况而定;不管您要学什么型号的单片机51也好,AVR也好,可以先找一个小的项目例子,比如流水灯一类的做,以提高兴趣。总之学习单片机要持之以恒,不断实践,新手学习时注意以下几点:
1、学习理论知识,书的话新手建议看看__王云51单片机教程,结合书带的视频一起看好理解;
2、最好有一个开发板,在开发板上从最简单的功能开始实现,比如做一个流水灯、蜂鸣器音乐盒等;
3、实现简单的功能后,开始尝试更复杂的程序,例如LCD显示、数字时钟、串口通信、中断控制等;
4、在上述功能均可以实现之后,可以组合实现,做一个多功能的单片机系统了;
5、如果对硬件熟悉,可以自己尝试做一个单片机开发板!
单片机C语言是什么
和c语言语法一样,多了一些和硬件相关的关键字,比如说sbit,当然不同单片机的c语言都有所不同
单片机C语言入门
本书为单片机C语言入门图书,主要内容包括MCS-51单片机概述,C51语言的基本语法、语句、函数、数组、结构体、联合体、预处理功能,开发和软件仿真环境KeilμVision的使用方法,MCS-51单片机内部资源的编程及使用,MCS-51单片机扩展资源的方法和编程,MCS-51单片机外围接口的设计和编程,最后讲解了跑马灯、矩形波发生器、4路抢答器、I2C总线器件的读写、双端口随机读写存储器IDT7132的使用等几个实例。 本书实例丰富、语言通俗,适合单片机初学者学习使用,也适合大专院校相关专业师生学习参考。
用c语言对单片机编程,对c语言的程度要求是怎样的
单片机会了,C知道一点就可以,不知道边学边写代码页很快可以学会。
单片机不会,C的程度再高也白搭。
这么真不好说,当然是学得越精越好,其实要求也没有那么高,慢慢来,你在学习单片机的过程中也就是在学习和巩固C语言的知识,这让我想到我玩单片机这两年来,还真没用的C语言的很难的地方,如果要用到的时候在找本书看看。
哈哈,这个没那么高深
只要会用几个语句就够了
if ,while ,for ,switch 这四个命令语句和 int char 变量类型,外加判断和运算关系符就基本可以了
哦对了,还有数组
至于其他的嘛,就是单片机专有的书写格式和寄存器与端口的缩写名了
找本书现用现查即可
就这么简单,所有这些怎么用、用来干什么就是你说的算了
我帮你捋顺一下思路吧
C基础 主要包括以下几6大方面
数据类型
各种运算符
三种控制结构(顺序 选择 循环)
函数
数组
指针
我当初和你一样,也是自学的,其实并不难,我看的是夏老师,讲的挺简明易懂的,特别适合我这样0基础的,上面说的这些就是讲的主要内容
国内单片机编程的主要语言是C,国外有些C++之类的。
如果说程度要求的话,再高都不为过。但是,只要会基本逻辑语句和函数还有指针之类的不算复杂的基础性C语言知识,在单片机编程中,就不会遇到语言语法上的问题。
入手的话,可以从51单片机之类的开始,多看例程,然后试着做一些小东西。然后,等对单片机熟悉之后,可以尝试ARM内核或者其他种类的单片机。
入门教程推荐郭天祥的21天学会单片机。
入门标准基本上是,学会自己从硬件到软件,设计一个简单的电子时钟。
学单片机只是一个开始,更多的是看以后的方向,说实话,目前来讲,单片机技术人才有些过剩了,等对整个电子技术开发体系了解之后,可以转向更高的平台,而不是固守单片机。
加油 -oo-
编程入门先学什么?
编程入门先学C语言或者python。
为了解决使用机器语言编写应用程序所带来的一系列问题,人们首先想到使用助记符号来代替不容易记忆的机器指令。这种助记符号来表示计算机指令的语言称为符号语言,也称汇编语言。
在汇编语言中,每一条用符号来表示的汇编指令与计算机机器指令一一对应;记忆难度大大减少了,不仅易于检查和修改程序错误,而且指令、数据的存放位置可以由计算机自动分配。
扩展资料:使用汇编语言编写计算机程序,程序员仍然需要十分熟悉计算机系统的硬件结构,所以从程序设计本身上来看仍然是低效率的、繁琐的。
但正是由于汇编语言与计算机硬件系统关系密切,在某些特定的场合,如对时空效率要求很高的系统核心程序以及实时控制程序等,迄今为止汇编语言仍然是十分有效的程序设计工具。
但它有不可替代的特性,比如一些单片机或者一些直接控制硬件的程序就一定要用汇编语言。
单片机编程用什么语言
摘要:单片机编程是学习单片机的一个重要部分,编程关系到单片机能否正常运行,一般情况下,单片机的程序是用C语言编写的,不过不是传统C语言,而是变种后的C51语言;此外,启动部分、一些要求时效性特别强的部分会用汇编语言编程。学习单片机编程的时候,先要模仿例题,然后试着自己写,熟练了再看别人的编程进行改进。下面一起来了解一下单片机编程用什么语言吧。一、单片机编程用什么语言单片机编程是指编写单片机运行的程序,一般来说,对于刚刚入门学习单片机的朋友来说,学习单片机的编程是很重要的,那么单片机用什么语言编程呢?1、C语言大多数情况下,单片机运行的程序,都是C语言编写的。不过并不是纯粹的传统C语言,而是变种后的C51语言。单片机C51语言是由C语言继承而来的。和C语言不同的是,C51语言运行于单片机平台,而C语言则运行于普通的桌面平台。C51语言具有C语言结构清晰的优点,便于学习,同时具有汇编语言的硬件操作能力。对于具有C语言编程基础的工程师,能够轻松地掌握单片机C51语言的程序设计。2、汇编语言汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,也称为符号语言。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。在一些情况下,C51并不能完美的实现功能,所以汇编语言是对C51的一个重要补充。一般来说,启动部分(基础硬件的初始化),往往是由汇编语言完成的。除此以外,一些要求时效性特别强,效率要求特别高时,也需要使用汇编语言完成。二、怎么学好单片机编程单片机的编程并不简单,一个完整程序的形成需要有C语言知识以及编程逻辑,编程逻辑决定一个程序是否优秀,是单片机编程一个很重要的问题,只有通过多阅读大神的优秀代码和多动手编写的时候才能一点一点的积累。在学习单片机编程的过程中,按照以下过程学习,效果会更好:1、作为一个初学者,我们就如同一个婴儿一样,我们的第一个能力就是模仿。通过例题的模仿,先熟悉C语言的编写和编辑器的使用。2、然后尝试着不看案例自己写,多写几次找出自己的不足,再通过看书补足。3、最后我们再试着去修改程序,最简单的就是从左到右变成从右到左。最后去阅读一些优质的代码,研究人家的编程思路,找出自己思路的差异多想一下为什么;领会其中每一条语句的作用;对有疑问的地方试着按照自己的思路修改程序,运行别人的程序和自己修改的程序有何不同,领会其中的奥妙。在学会单片机的编程后,多去看看企业制作产品的标准,自己去动手做,多做项目累积经验,熟能生巧。
单片机C语言编程
单片机的外部结构:
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。
初始化灯灭,设为00。先进行按键的读取,一个按键控制开关,就先判断是否按下开关键,没有的话就不执行,直到按下,执行下面的语句。再进行按键的读取,如果按下控制4个LED灯的键,那就先赋初值0001,点亮一个灯,再用左移或是右移,循环点亮4个灯;如果按下控制2个LED灯的按键,就按一下相应位置1,也可以设初值01,进行左移或是右移,同时也要判断是否按下开关键,如果按下就退出当前语句,返回至初始的按键读取
DS1302里的时间是以BCD码形式存放的。当你编程要把数据存在DS1302里时
,通常要将之转化为BCD码。如:(X/10)<<4
|
(X%10),
X代表十进制数,(X/10)<<4
|
(X%10)这个就能直接写入DS1302了
这个不难实现,利用独立按键和流水灯的知识可以做的。试试看。
KEY4 EQU 30H
KEY2 EQU 31H
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
CLR EA
MOV SP,#5FH
MOV KEY2,#0
MOV KEY4,#0
LOOP:
JB P1.0,LOOP
MOV R7,#10
LCALL DELAY
JB P1.0,LOOP
JNB P1.0,$
MOV P3,#0C0H
LOOP0:
LCALL KEYDEAL
MOV A,KEY4
JNZ LOOP41
MOV A,P3
ANL A,#0F0H
ORL A,#0EH
MOV P3,A
SJMP LOOP21
LOOP41:
DEC A
JNZ LOOP42
MOV A,P3
ANL A,#0F0H
ORL A,#0DH
MOV P3,A
SJMP LOOP21
LOOP42:
DEC A
JNZ LOOP43
MOV A,P3
ANL A,#0F0H
ORL A,#0BH
MOV P3,A
SJMP LOOP21
LOOP43:
DEC A
JNZ LOOP21
MOV A,P3
ANL A,#0F0H
ORL A,#07H
MOV P3,A
LOOP21:
MOV A,KEY2
JNZ LOOP22
MOV A,P3
ANL A,#0FH
ORL A,#20H
MOV P3,A
SJMP LOOP3
LOOP22:
DEC A
JNZ LOOP3
MOV A,P3
ANL A,#0FH
ORL A,#10H
MOV P3,A
LOOP3:
LJMP LOOP0
;----------------------------
DELAY:
MOV R2,#2
DLY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DLY1
DJNZ R7,DELAY
RET
;-----------------------------
KEYDEAL:
JB P1.1,KEYEN1
MOV R7,#10
LCALL DELAY
JB P1.1,KEYEN1
JNB P1.1,$
INC KEY4
MOV A,KEY4
ANL A,#03H
MOV KEY4,A
KEYEN1:
JB P1.2,KEYEN2
MOV R7,#10
LCALL DELAY
JB P1.2,KEYEN2
JNB P1.2,$
INC KEY2
MOV A,KEY2
ANL A,#01H
MOV KEY2,A
KEYEN2:
RET
;-----------------------------
END