第一篇:单片机外围电路设计及C语言编程视频
单片机外围电路设计及C语言编程视频教程介绍
这是一部学单片机革命性的视频教程,教程全部十二讲,每讲3小时左右,讲座从最基本的预备知识开始讲起,非常详细的讲解KEIL编译器的使用,包括软件仿真,测定时间,单步运行,全速运行,设置断点,调试,硬件仿真调试,变量观察等,整个过程全部用单片机的C语言讲解,从C语言的第一个主函数MAIN讲起,一步步一条条讲解每一个语法,每条指令的意思,即使对单片机一巧不能,对C语言一无所知,通过本课程十节课的内容也可以让你轻松掌握51单片机的C语言编程设计,全新的讲课风格跳过复杂的单片机内部结构知识,首先从单片机的应用讲起一步步深入到内部结构,让学生彻底掌握其实际应用方法,把51单片机的所有应用每个部分都讲解的非常仔细,在讲解单片机应用的同时将单片机的常用外围电路设计及电阻,电容选值等都讲的清清楚楚,教师在教室前面用电脑一条一条写程序,旁边用TX-1C单片机实验板一个实验一个的演示,给学员解释每条指令的意思及原理,通过十天的时间让学生完全掌握单片机的C语言编程及单片机外围电路设计的思想。全程的屏幕,声音,用屏幕录像,实验板现象用摄像头拍摄,这部教程算是国内首个如此创新的以教师亲自实践为主,学员现场写程序,直接下载到实验板看现象,讲单片机的视频教程,只要你认真看,认真听,保证十天让你学会单片机应用和C语言编程。
教师推荐书籍如下:
1.如果要学C语言基本知识请看 谭浩强写的《C程序设计》 教师推荐的单片机书籍为以下两本: 2.新编MCS-51单片机应用设计 哈尔滨工业大学出版社
张毅刚
上书主要以汇编语言为主,对单片机内部结构介绍较详细,初学者可选择本书,在听讲本课程的同时,不但学会了C语言,而且通过查看本书还可了解汇编语言。3.8051系列单片机C程序设计完全手册 人民邮电出版社
求是科技
第二篇:《单片机与外围电路设计》课程设计大纲(模版)
《单片机与外围电路设计》课程设计大纲
一、基本信息
1、课程中文名称:单片机与外围电路设计课程设计
2、课程英文名称:Course Design of Single-Chip Microcomputer
and its Peripheral Circuit Design3、课程编号:XX X XXX6位,1-2位为开课学院代码,3位为开课层次(研究生0、本科
1、专科2),4-6位为课程序号。在不同学期开设的课程应设置不同的代码。非单独设置的实验课程依所属课程代码。课程编号应与教务综合管理系统中所用编号一致。
4、课程类别:专业课(专业理论课、专业技术课、专业实验课)。
5、课程性质:专业选修课
6、适用层次:汉族本科
7、适用专业:计算机科学与技术、通信工程
8、开课学期:第5学期
9、学时:两周10、学分:1
二、实践教学目标与基本要求
随着就业形势日趋严峻,大学生的动手能力、实践能力和综合素质越来越受到学校和用人单位的重视,在大学期间,课程设计是培养和锻炼动手、实践能力和综合素质的一个重要环节,通过本课程设计能使学生对所学到的单片机知识进行一次综合实践,掌握单片机各主要知识点。
学生应了解单片机技术在家用电器以及自动控制工程中的应用,熟悉单片机的原理与结构。通过实验、实训和一些单片机项目的制作,掌握单片机指令系统、结构原理、接口技术,以及单片机应用系统开发、设计的基本技能。
三、选题
可供选题如下:(每三人一组,要求同时用汇编、C语言实现,并画出电路图;总课程设计时间为两周,在结束时须提交作品和课程设计论文)
(1)万年历设计(LCD显示)
(2)定时闹铃(LCD显示)
(3)定时闹钟(ds1302)
(4)音乐倒数定时器
(5)密码锁控制
(6)可存储式电子琴
(7)电子抢答器设计
(8)串行通信设计
(9)数显交通灯设计
(10)步进电机控制设计
(11)I2C总线器件使用(LCD显示)
(12)用12864设计的指针式电子钟
(13)用1602与ds18b20设计的温度报警器
(14)用ADC0808设计的调温报警器
(15)温度控制直流电机转速
(16)用DAC0808设计的直流电机调速器
(17)用74LS595与74LS154设计的16*16点阵屏
(18)用数码管设计的可调式电子钟
(19)简易计算器设计
(20)多路数字温度测量系统
(21)直流电动机的转速检测与脉宽调速
(22)基于单片机的交通灯控制器设计
(23)基于单片机的路灯控制器设计
(24)基于51单片机的广告灯设计
(25)基于单片机的USB接口设计
(26)PC机与单片机的串口通信
四、仪器设备配置
硬件工具:计算机基本的焊接工具万用表
软件工具:WINDOWS操作系统 汇编编译器及连接器
高级语言编译器 单片机仿真程序
五、教材与教学参考书
建议实验指导书:
单片机C语言程序设计实训100例,彭伟,北京:电子工业出版社,2009.6,第四次印刷
单片机课程设计指导,楼然苗,北京:北京航空航天大学出版社,2007.1,第五次印刷
六、实验(实习)报告
课程设计报告是课程设计工作的总结和提高,课程设计报告应该反映出学生在课程设计过程中所做的主要工作和取得的主要成果,以及心得体会。学生必须以积极认真、严谨求实的态度完成课程设计报告的撰写。
课程设计报告编写基本要求:
1、每个学生必须独立完成课程设计报告;
2、课程设计报告应书写规范、文字通顺、图表清晰、数据完整、结论明确;
3、课程设计报告应附参考文献;
4、课程设计报告不少于5000字,必须附有必要的结构图、流程图及测试结果等项内容。
(一)格式要求:
1、封面(统一格式)
2、课程设计任务书(统一格式)
3、报告内容:
(1)题目
(2)姓名###,专业###,年级###,学号###
(3)摘要
(4)方案论证及概述
①所作题目的意义、本人所做的工作;②系统的主要功能。
(5)电路设计
原理简述:①应用系统的基本原理;②电路原理;③外围设备器件工作原理。
(6)调试及性能分析
(7)结果(分析、讨论)
(8)参考文献
4、附件:
附A、原理图
附B、课程设计的体会(想法与建议)
附C、学生反映意见表
(二)课程设计报告文字编写格式和装订要求
1、设计报告一律要使用A4纸打印成文。
2、字间距设置为“标准”;
3、段落设置为“固定值22磅”;
4、字号设置为:
标题:宋体二号加粗;
正文一级标题:宋体四号加粗;
正文二级标题:宋体小四号加粗;
其余汉字均为宋体小四号;
正文中所有非汉字均为Times New Roman 体;
5、设计报告装订的顺序是:封面、正文、封底(留有指导教师的评阅空间)。
七、考核
课程设计成绩考核,应以学生对待设计的态度,设计中的动手能力和水平,课程设计说明书、设计总结报告的质量及实际动手能力几个方面的情况,对学生进行综合考核,按优、良、中、及格和不及格五个等级评分。成绩通过课程设计表现、动手能力和课程设计报告综合评定学生设计成绩。其中考勤占15%,动手能力和课程设计效果占50%,课程设计报告和总结占35%。
1、优秀(成绩>90)
课程设计态度端正,无缺勤和违纪,劳动刻苦、勤奋,工作积极主动;全面完成大纲要求,实际操作能力强,理论联系实际好,作业质量高,内容正确,课程设计报告全面系统,考试中回答问题正确完满。
2、良好(80<成绩≤90)
课程设计态度端正,无违纪现象,工作积极主动,较好完成大纲要求,有一定的实际操作能力,能理论联系实际,虚心学习,作业内容正确,课程设计报告全面系统,考试中能较完满正确地回答问题。
3、中等(70<成绩≤80)
学习态度基本正确,无违纪现象;有一定的实际操作能力,能理论联系实际,作业内容基本正确,达到课程设计大纲的要求,考核中能正确回答基本问题。
4、及格(60<成绩≤70)
课程设计态度基本正确,达到课程设计大纲的基本要求。能完成课程设计作业和课程设计报告,内容基本正确,考试中能回答基本问题。
5、不及格(成绩<60)
凡属下列条件之一者,均以不及格处理。
①未达到及格要求者;
②因故缺勤时间三分之一以上者。
第三篇:--单片机C语言编程实训
实习报 告
实习地点:201机房
实习时间:2014.12.1——2014.12.6 实习项目:单片机C语言编程实训 指导老师:骆
乐 姓
名:
班
级:电信3121
一、实习内容 1.计算字符的ASCII码
编写一个程序,在终端输入一个字符,输出它的ASCII码。解题思路:通常我们输出一个字符一般用printf(“%c”,c);的形式,因为输出格式规定的是“%c”,因此表示以字符的形式输出,所以我们看到的是相对应的ASCII码的字符形式。
用char定义字符a,a的值为任意值。输出结果a=%d。源代码:
#include
2.嵌套if-else语句的妙用
学校进行成绩分级管理,取消分数制,改为成绩分级评定。具体办
法是:小羽60分为E类;60分至70分(不含70分)为D类;70分至80分(不含)为C类;80分至90分(不含)为B类;90分以上为A类。设计一个程序。对输入的成绩进行等级划分。
解题思路:先把头文件和主函数输入。定义score为整型变量,定义grade为字符型变量。定义score为任意值scanf(“%d”,score)。使用多分支条件语句,判断趁机的等级。
源代码:
#include
}
程序截图:
3.判断日期
输入一个日期(年月日),输出这是某年的第几天。源代码:
#include “stdio.h” void main(){ int year,month,day;int cday;scanf(“%d %d %d”,&year,&month,&day);switch(month){ case 1: cday = 0;break;case 2: cday = 31;break;case 3: cday = 31+28;break;case 4:
cday = 31+28+31;break;case 5: cday = 31+28+31+30;break;
case 6: cday = 31+28+31+30+31;break;case 7: cday = 31+28+31+30+31+30;break;case 8: cday = 31+28+31+30+31+30+31;break;case 9: cday = 31+28+31+30+31+30+31+31;break;case 10: cday = 31+28+31+30+31+30+31+31+30;break;case 11: cday = 31+28+31+30+31+30+31+31+30+31;break;
case 12:
cday = 31+28+31+30+31+30+31+31+30+31+30;
break;} cday += day;
if((year % 4 ==0 && year % 100!=0 || year % 400 == 0)&& month > 2){ cday += 1;} printf(“%d,n DCF 14 ”,cday);
getch();}
程序截图:
4.打印特殊图案
请设计一个程序,实现在屏幕上输出一个下面的图案 解题思路:直接输入编程,但要注意*间的空格。源代码:
#include
* n * * * n* * * * *n ,DCF 14 n”);getch();}
程序截图:
5.求两个数的最大公约数和最小公倍数
编写一个程序计算两个正整数的最大公约数和最小公倍数
源代码:
#include
int main(int argc,int *argv[]){ int num1,num2,temp;int a,b;a > b;printf(“please input 2 number:”);scanf(“%d,%d”,&num1,&num2);if(num1 < num2){ temp = num1;num1 = num2;num2 = temp;} a = num1;b = num2;while(b){ temp = a % b;a = b;b = temp;}
printf(“the zuidagongyuehsu:%d,the zuixiaogongbeishu:%dn”,a,num1 * num2 / a);printf(“%dn,dcf 14 n”);system(“pause”);return 0;getch();}
程序截图:
6.猴子吃桃问题
有一只猴子第一天摘下若干个桃子,当即吃掉了一半,又多吃了一个;第二天又将剩下的桃子吃了一半,有多吃了一个;按照这样的吃法每天都吃前一天剩下的桃子的一半又一个。到了第10天,就只剩一个桃子。问题:这只猴子第一天摘了多少个桃子。源代码:
#include
void main(){ int day,x1,x2;day=9;x2=1;while(day>0){ x1=(x2+1)*2;x2=x1;day--;} printf(“total=%dn dcf 14”,x1);getch();}
程序截图:
7.谁在说谎
3个嫌疑犯在法官面前各执一词,甲说:已在说谎;已说:甲在说谎;丙说:甲已两人都在说谎。法官为了难,甲乙丙三人到底谁在说谎,睡说的是真话呢?
源代码:
#include
int main(int argc, char *argv[]){
int a,b,c;
for(a=0;a<2;a++)
for(b=0;b<2;b++)
for(c=0;c<2;c++)
if((a&&!b ||!a&&b)&&(b&&!c || b&&c)&&(c &&a+b == 0 ||!c&&a+b!= 0))
printf(“j told a %sn”,a?“truth”:“lie”);
printf(“y told a %sn”,b?“truth”:“lie”);
printf(“b told a %sn”,c?“truth”:“lie”);
printf(“%dn dcf 14n”);
getch();}
程序截图:
第四篇:C语言编程
#include(stdio.h)
main()
{ int question[4]={-1,-1,-1,-1},i=0,j=0,k=0,A=0,B=0,answer[4]={0};
char again='y';
while(again=='y'){ srand((int)time(0));
while(i4){ k=(int)rand()%10;
for(j=0;ji;j++)if(k==question[j]){ k=-1;break;}
if(k==-1)continue;question[i]=k;i++;}/*while i*/
for(i=8;i0;i--)/*还有8次机会*/
{ A=0;B=0;printf(“n你还剩下%d次机会。”,i);
printf(“n请输入四个0-9之间的数字,中间用空格隔开n”);for(j=0;j4;j++)scanf(“%d”,&answer[j]);
for(j=0;j4;j++)
for(k=0;k4;k++)
{ if(answer[j]==question[k]){ if(j==k)A++;else B++;} }/*for*/
if(A==4){ again='0';
printf(“n你赢了,还继续猜吗?(y/n)”);
while(again!='y'&&again!='n')
scanf(“...%c”,&again);break;}/*if*/
printf(“n%dA%dB”,A,B);if(i==1){ again='0';
printf(“n你输了,正确答案是”);
for(j=0;j4;j++)
printf(“%dt”,question[j]);
printf(“n还继续吗?(y/n)”);
while(again!='y'&&again!='n')scanf(“%c”,&again);
printf(“%c”,again);break;}/*if*/ }/*for changce*/ }/*while again*/ printf(“感谢您玩这个游戏。”);}
第五篇:C语言经典编程题(推荐)
C语言经典编程题
题目01:在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同的单词。
[cpp] view plain copy print?
1.2.3.4.5.6.7.8.9.int main(){
// 用数组定义一个字符串
char array[50] = “zha junju zhamengjun z mengjun”;
char *str = array;// 定义指针变量str,指向数组array
int len = 0;// 定义变量len,用于计数
int max = 0;// 定义变量max,存放最长单词的长度
char *p = 0;// 定义指针变量p,指向最长单词的首字符
10.11.// 判断指针当前指向的字符是不是' '
12.while(*str!= ' ')13.{
14.if(*str!= ' ')// 判断字符是不是空格 15.{
16.len++;// 计数加1 17.18.// 判断最大长度跟len长度的大小
19.if(max < len){
20.max = len;// 如果max小于len,将len赋值给max
21.p = str1];
46.} 47.else
48.{
49.sumDaysOfMonth += pingYear[monthDay;// 定义整型变量days,存储一个月内相隔的天数
54.int sumDays = 0;// 定义整型变量sumDays,存储两个时间点相隔的总天数
55.56.// 得到两个时间点相隔的总天数
57.sumDays = sumDaysOfYear + sumDaysOfMonth + days;58.59.printf(“两个时间点相隔%d天n”, sumDays);60.61.// 根据相隔的天数,判断小明遇到的人
62.if((sumDays % 2 == 0)&&(sumDays % 3 == 0))63.{
64.printf(“小明既结识了帅哥又结识了美女!n”);65.}
66.else if(sumDays % 2 == 0)67.{
68.printf(“小明结识了帅哥!n”);69.}
70.else if(sumDays % 3 == 0)71.{
72.printf(“小明结识了美女!n”);73.} 74.else
75.{
76.printf(“小明没有结识帅哥和美女n”);77.} 78.}
心得体会:(1)利用for循环遍历,if条件来判断是平年还是闰年,求出相隔年数的累加的天数(2)同理,利用第一步的方法,求出相隔月数的累加的天数,只是要注意每月的天数,根据平年和闰年的不同分别保存在两个不同的数组中,以便利于累加
(3)将输入的日减1,计算出当月相隔的天数,最后求出两个日期相隔的总天数。(4)根据总天数取余2和3,判断出小明当天结识的是美女还是帅哥。
题目05:提示用户输入一个正整数n,利用while循环计算并输出:1-2+3-4+5-6+7…+n的和。
[cpp] view plain copy print?
1.2.3.4.5.6.7.8.9.int main(){
// 1.定义变量存储用户输入的整数
int n = 0;
// 2.判断n是否为正整数
while(n <= 0){
// 2.1 提示输入
printf(“输入一个正整数:n”);
10.11.// 2.2 让用户输入
12.scanf(“%d”, &n);13.} 14.15.// 3.计算阶乘
16.int sum = 0;// 存储计算结果
17.int current = 0;// 当前要累加的数值
18.while(current < n){ 19.current++;20.21.// 如果是偶数,就减
22.if(current % 2 == 0){ 23.sum-= current;24.} else { // 如果是奇数,就加
25.sum += current;26.} 27.} 28.29.// 4.输出结果 30.printf(“%dn”, sum);31.32.return 0;33.}
心得体会:
(1)确保从键盘上输入的是一个整数(用while来判断);(2)用while循环来遍历从1到n的值;
(3)通过奇偶性判断所要累加数值的正负性,奇数就累加,偶数就累减。
题目06:提示用户输入一个正整数n,计算并输出n的阶乘结果:1*2*3*…*n。
[cpp] view plain copy print?
1.2.3.4.5.6.7.8.9.int main(){
// 1.定义变量存储用户输入的整数
int n = 0;
// 2.判断n是否为正整数
while(n <= 0){
// 2.1 提示输入
printf(“输入一个正整数:n”);
10.11.// 2.2 让用户输入
12.scanf(“%d”, &n);13.} 14.15.// 3.计算阶乘
16.int result = 1;// 存储计算结果
17.int current = 1;// 当前的乘数
18.while(current <= n){
19.result *= current;// 累乘每次的乘数
20.current++;// 乘完一次就++
21.} 22.23.// 4.输出阶乘结果
24.printf(“%d!= %dn”, n, result);25.26.return 0;27.}
心得体会:
(1)可以利用for循环或者while循环进行遍历,利用累乘即可求出值。(2)还可以利用递归来做,更简单。
题目07:编写一个函数,判断某个字符串是否为回文。回文就是从左边开始读 和 从右边开始读 都是一样的,比如“abcba” [cpp] view plain copy print?
1.2.3.4.5.6.7.8.9.int main(){
printf(“%dn”, isHuiwen(“a”));
return 0;}
/*
返回1代表是回文
返回0代表不是回文
10.*/ 11.int isHuiwen(char *str)
12.{
13.// 1.定义一个指向变量left指向字符串的首字符
14.char *left = str;
15.// 2.定义一个指向变量right指向字符串的末字符
16.char *right = str + strlen(str)1)+ count(n);// 求出每一个阶乘的累加和
58.} 59.60.// 定义和求出一个累加和
61.int count(int n)
62.{
63.if(n == 1)64.return 1;
65.return count(n1;22.23.// 如果左边元素的下标 < 右边元素的下标
24.while(left < right)25.{
26.// 利用中间变量交换两个元素的值
27.int temp = array[left];28.array[left] = array[right];29.array[right] = temp;30.31.// 交换一次后,左边元素下标增加,右边元素下标减小
32.33.left++;34.right--;35.} 36.}
心得体会:
(1)首先要明白一点,为什么不能通过sizeof(array)/ sizeof(int)来求出数组元素的个数?因为当数组作为参数传递的时候,函数的参数array实际上当做变量来存储传来的数组首元素的地址。而每一个指针变量占用8个字节。
(2)分别拿出数组首元素和数组尾元素,然后利用中间变量交换两个元素的值。(3)利用while循环,遍历数组元素,并使left< right保证循环到中间即可,否则每个元素又进行一次交换,结果值没有改变。
(4)函数reverse不需要返回值,因为改变了形参数组也就改变了外面的实参数组,因为数组是按址传递的。