单片机实验proteus 仿真C语言

合集下载

单片机的C语言程序设计与应用——基于Proteus仿真(第2版)

单片机的C语言程序设计与应用——基于Proteus仿真(第2版)
void main(void)
{TL0=0xb0; //访问定时器0,设置时间常数
TH0=ox3c;
TR0=1; //启动定时器0

}
3-3 sbit型变量的定义示例
程序如下:
sfr PSW=0xD0;
sbit OV=PSW^2;
sbit OV=0xd0^2;
sbit OV=0xD2;
unsigned char bdata flag;
if(a==b)
{ a++;b++;}
{ a--;b--;}
printf("a=%d,b=%d\n",a,b);
while(1);
}
执行结果如下:
a=11,b=20
3-16选择语句程序示例
#include<stdio.h>
void main()
{ int score;
char grade;
score=45;
if(score>=90)
grade='A';
else if(score>=80)
grade='B';
else if(score>=70)
grade='C';
else if(score>=60)
grade='D';
else grade='E'
printf("score=%d,grade=%c\n",score,grade);
}
}
}由于不知道什么时候能够超过4000,所以使用一个‘无限循环’,每次计算和之后判断当前sum的值,当sum超过4000时使用break退出整个循环,不再执行。

51单片机C语言实例(350例)Proteus仿真和代码都有

51单片机C语言实例(350例)Proteus仿真和代码都有

51单片机C语言实例(350例)Proteus仿真和代码都有51单片机C语言实例(400例)所有实例程序均经测试过,适合新手学习。

1-IO输出-点亮1个LED灯方法1 10-LED循环左移100-24c02记忆开机次数101-24c02存储上次使用中状态102-DS1302 时钟原理103-DS1302可调时钟104-DS1302时钟串口自动更新时间105-1602液晶显示DS1302时钟106-字库ST7920 12864液晶基础显示107-按键 12864显示108-PCF8591 1路AD数码管显示109-PCF8591 4路AD数码管显示11-LED循环右移110-PCF8591 DA输出模拟111-PCF8591 输出锯齿波112-PCF8591 1602液晶显示113-串口通讯114-串口通讯中断应用115-RS485基本通讯原理116-红外接收原理117-红外解码数码管显示118-红外解码1602液晶显示119-红外发射原理12-查表显示LED灯120-红外收发测试121-双红外发射避障原理测试122-1个18B20 温度传感器数码管显示123-1个18b20温度传感器1602液晶显示124-多个18b20温度传感器1602液晶显示125-超温报警测试126-温度可调上下限1602126-温度可调上下限1602显示127-PS2键盘输入1602液晶显示128-双色点阵1种颜色显示测试129-双色点阵2种颜色显示测试13-双灯左移右移闪烁130-双色点阵显示特定图形131-双色点阵交替图形显示132-双色点阵双色交替动态显示133-热敏电阻测试数码管显示134-光敏电阻测试数码管显示135-自动调光测试136-串转并数字芯片测试137-非门数字芯片测试138-电子琴139-实用99分钟倒计时器14-花样灯140-外部频率测试141-定时做普通时钟可调142-1602液晶显示的密码锁143-实用密码锁144-1602液晶显示的计算器145-秒表146-串口测温电脑显示147-交通灯测试148-点阵模拟电梯上行下行149-点阵流动广告模拟15-PWM调光150-综合测试程序151-12位AD_DS1621与12864液晶152-闪烁灯一153-闪烁灯二154-流水灯A155-51单片机12864大液晶屏proteus仿真156-流水灯B157-数码管显示158-12864LCD显示计算器键盘按键实验159-数码管显示(锁存器)16-共阳数码管静态显示160-数码管动态显示161-数码管滚动显示162-数码管字符显示163-独立按键164-矩阵键盘165-矩阵键盘(LCD)166-用DS1302与12864LCD设计的可调式中文电子日历167-定时器的使用(方式1)168-12864LCD图形滚动演示169-用PG12864LCD设计的指针式电子钟17-1个共阳数码管显示变化数字170-定时器的使用(方式2)171-外部中断的使用172-定时器和外部中断173-开关控制12864LCD串行模式显示174-点阵显示175-液晶1602显示176-12864带字库测试程序177-串行12864显示178-遥控键值解码-12864LCD显示179-液晶12864并行18-单个数码管模拟水流180-液晶12864并行2181-串口发送试验182-串口接收试验183-串口接收(1602)184-蜂鸣器发声185-直流电机调速186-蜂鸣器间断发声187-lcd-12864应用188-继电器控制189-直流电机调速19-按键控制单个数码管显示190-步进电机191-存储AT24C02192-PCF8591T AD实验193-PCF8591T芯片DA实验194-温度采集DS18B20195-EEPROM_24C02196-12864LCD显示24C08保存的开机画面197-红外解码198-12864LCD显示EPROM2764保存的开机画面199-时钟DS1302(LCD)2-IO输出-点亮1个LED灯方法220-单个数码管指示逻辑电平200-宏晶看门狗201-SD卡202-秒表203-普通定时器时钟204-彩屏控制205-彩屏图片显示206-12864+DS1302时钟+18B20温度计207-12864测试程序208-12864串行驱动演示209-12864生产厂程序21-8位数码管显示其中之一210-12864中文显示测试211-LCD12864212-12864M液晶显示(有字库)程序(汇编)213-超声波测距LCD12864显示214-红外遥控键值解码12864液晶显示(汇编语言)215-用DS1302与12864LCD设计的可调式中文电子日历216-中文12864217-中文12864LCD显示红外遥控解码实验218-IO端口输出219-IO端口输入22-8位数码管静态显示其中之二220-流水灯221-数码管显示223-独立按键224-独立按键去抖动225-定时器0226-定时器1227-定时器2228-外部中断0电平触发229-外部中断0边沿触发23-8位数码管动态扫描显示230-外部中断1231-矩阵键盘232-液晶LCM1602233-LCD1602动态显示234-EEPROM24c02235-开机次数记忆236-红外解码LCD1602液晶显示237-红外解码数码管显示238-喇叭239-液晶背光控制24-8位数码管动态扫描原理演示240-与电脑串口通信241-步进电机242-字库LCD12864液晶测试243-液晶数码综合显示244-99秒计时245-99倒计时246-抢答器247-PWM调光248-LED点阵249-直流电机调速250-按键计数器251-秒表252-数码管移动253-花样灯254-红绿灯255-音乐播放256-红外收发演示257-普通定时器时钟258-继电器控制259-ps2键盘LCD1602液晶显示26-9累加260-RTC实时时钟DS1302液晶显示261-单线温度传感器18b20262-串口测温263-带停机步进电机正反转264-步进电机正反转265-AD_DA_PCF8591266-液晶AD_DA_PCF8591267-秒手动记数268-功能感受269-流水登27-99累加270-点亮一个二极管271-用单片机控制一个灯闪烁272-将P1口状态送入P0、P2、P3273-P3口流水灯274-通过对P3口地址的操作流水点亮8位LED 275-用不同数据类型控制灯闪烁时间276-用P0口、P1 口分别显示加法和减法运算结果277-用P0、P1口显示乘法运算结果278-用P1、P0口显示除法运算结果279-用自增运算控制P0口8位LED流水花样28-999累加280-用P0口显示逻辑与运算结果281-用P0口显示条件运算结果282-用P0口显示按位异或运算结果283-用P0显示左移运算结果284-万能逻辑电路实验285-用右移运算流水点亮P1口8位LED286-用if语句控制P0口8位LED的流水方向287-用swtich语句的控制P0口8位LED的点亮状态288-用for语句控制蜂鸣器鸣笛次数289-包含单片机寄存器的头文件29-9999累加290-用do-while语句控制P0口8位LED流水点亮291-用字符型数组控制P0口8位LED流水点亮292-用P0口显示字符串常量293-用P0 口显示指针运算结果294-用指针数组控制P0口8位LED流水点亮295-用数组的指针控制P0 口8 位LED流水点亮296-用P0 、P1口显示整型函数返回值297-用有参函数控制P0口8位LED流水速度298-用数组作函数参数控制流水花样299-用数组作函数参数控制流水花样3-IO输出-点亮多个LED灯方法130-9累减300-用函数型指针控制P1口灯花样301-用指针数组作为函数的参数显示多个字符串302-字符函数ctype.h应用举例303-内部函数intrins.h应用举例304-标准函数stdlib.h应用举例305-字符串函数string.h应用举例306-宏定义应用举例307-文件包应用举例308-条件编译应用举例309-用定时器T0查询方式P2口8位控制LED闪烁31-99累减310-用定时器T1查询方式控制单片机发出1KHz音频311-将计数器T0计数的结果送P1口8位LED显示311-用定时器T0的中断控制1位LED闪烁312-用定时器T0的中断实现长时间定时313-用定时器T1中断控制两个LED以不同周期闪烁314-用计数器T1的中断控制蜂鸣器发出1KHz音频315-用定时器T0的中断实现渴望主题曲的播放316-输出50个矩形脉冲317-输出正脉宽为250微秒的方波318-用定时器T0控制输出高低宽度不同的矩形波319-用外中断0的中断方式进行数据采集32-999累减320-输出负脉宽为200微秒的方波321-方式0控制流水灯循环点亮322-数据发送程序323-数据接收程序324-单片机向PC发送数据325-单片机接收PC发出的数据326-用LED数码显示数字5327-用LED数码显示器循环显示数字0~9328-用数码管慢速动态扫描显示数字1234329-用LED数码显示器伪静态显示数字123433-9999累减330-用数码管显示动态检测结果331-数码秒表设计332-数码时钟设计333-用LED数码管显示计数器T0的计数值334-静态显示数字“59”335-无软件消抖的独立式键盘输入实验336-软件消抖的独立式键盘输入实验337-CPU控制的独立式键盘扫描实验338-定时器中断控制的独立式键盘扫描实验339-独立式键盘控制的4级变速流水灯34-显示小数点340-独立式键盘的按键功能扩展:以一当四341-独立式键盘调时的数码时钟实验342-独立式键盘控制步进电机实验343-矩阵式键盘按键值的数码管显示实验344-矩阵式键盘按键音345-简易电子琴346-矩阵式键盘实现的电子密码锁347-用LCD显示字符'A'348-用LCD循环右移显示Welcome to China 349-将数据0x0f写入AT24C02再读出送P1口显示35-数码管消隐350-液晶时钟设计36-数码管递加递减带消隐37-数码管左移38-数码管右移38-数码管右移139-数码管右移24-IO输出-点亮多个LED灯方法240-数码管循环左移41-数码管循环右移41-数码管循环右移142-数码管循环右移243-数码管闪烁44-数码管局部闪烁45-定时器046-定时器147-定时器248-产生1mS方波49-产生200mS方波5-闪烁1个LED50-产生多路不同频率方波51-1个独立按键控制LED52-1个独立按键控制LED状态转换53-2按键加减操作53-2按键加减操作数码管显示54-多位数按键加减(闪烁)54-多位数按键加减(闪烁)数码管显示55-多位数按键加减(不闪烁)55-多位数按键加减(不闪烁)数码管显示56-定时器扫描数码管(不闪烁)57-按键长按短按效果58-抢答器59-独立按键依次输入数据6-不同频率闪烁1个LED灯60-按键从右至左输入61-8位端口检测8独立按键62-矩阵键盘行列扫描63-矩阵键盘反转扫描64-矩阵键盘中断扫描65-矩阵键盘密码锁66-矩阵键盘简易计算器67-外部中断0电平触发68-外部中断1电平触发69-外部中断0下降沿触发7-不同频率闪烁多个LED灯70-外部中断1下降沿触发71-T0外部计数输入72-T1外部计数输入73-看门狗溢出测试74-按键喂狗75-喇叭发声原理76-警车声音77-救护车声音78-喇叭滴答声79-报警发声8-8位LED左移80-消防车警报81-音乐播放82-步进电机转动原理83-步进电机正反转84-步进电机按键控制85-步进电机转速数码管显示86-双步进电机综合控制86-步进电机调速原理87-双步进电机综合控制87-步进电机综合控制87-步进电机调速原理88-直流电机按键控制89-直流电机调速控制9-8位LED右移90-继电器控制原理91-双继电器模拟洗衣机电机控制92-1602液晶静态显示93-1602液晶动态显示94-1602液晶滚动显示95-1602液晶移动显示96-1602液晶按键输入显示97-2402存储1个数据98-24c02存储多个数据99-24c02存储花样流水灯。

(整理)单片机C语言程序设计实训100例

(整理)单片机C语言程序设计实训100例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++)P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。

单片机的C语言程序设计与应用——基于Proteus仿真(第2版)

单片机的C语言程序设计与应用——基于Proteus仿真(第2版)

单片机的C语言程序设计与应用——基于Proteus仿真(第2版)单片机的C语言程序设计与应用——基于Proteus仿真(第2版)单片机的C语言程序设计是嵌入式系统开发的基础,也是现代电子产品设计中不可或缺的重要环节。

借助Proteus仿真软件,可以更加方便、快捷地进行单片机程序的开发与调试。

本文将介绍单片机的C语言程序设计与应用,以及如何在Proteus仿真环境中进行程序的调试。

一、单片机的C语言程序设计基础C语言是一种高级编程语言,被广泛应用于单片机程序设计中。

在进行单片机的C语言程序设计之前,我们需要掌握一些基本概念和常用语法。

1. 数据类型与变量在C语言中,需要首先定义所使用的数据类型和变量。

常见的数据类型包括整型、浮点型、字符型等。

通过定义变量,并为其分配内存空间,我们可以在程序中存储和处理数据。

2. 控制语句与循环结构控制语句可以用来控制程序的执行流程和逻辑。

常见的控制语句包括条件语句(如if-else语句)、选择语句(如switch语句)等。

循环结构可以用来重复执行一段代码,提高程序的效率。

3. 函数与库函数函数是C语言程序的基本模块,可以封装一段特定的功能。

通过自定义函数和调用库函数,我们可以实现各种功能的组合与调用。

二、Proteus仿真环境的使用Proteus是一款强大的电子设计自动化软件,常用于单片机程序的仿真和调试。

在进行单片机的C语言程序设计时,我们可以借助Proteus 提供的仿真环境进行代码的调试和性能分析。

1. 新建项目与配置在Proteus中,首先需要新建一个项目,并配置所使用的单片机型号和外部电路等。

通过添加合适的元件和连接引脚,可以搭建出一个完整的单片机电路。

2. 编写C语言代码在Proteus的项目中,可以添加一个“C源文件”来编写自己的C语言代码。

通过编写代码,可以实现所需的功能和逻辑。

在编写代码时,需要注意与所使用的单片机型号和引脚连接的兼容性。

3. 仿真与调试在编写完C语言代码后,我们可以进行仿真和调试。

Proteus仿真PIC的C语言程序

Proteus仿真PIC的C语言程序

Proteus仿真PIC的C语言程序目录PICC开发环境配置 (1)使用USART同步发送数据 (5)使用MSSP模块的SPI模式扩展接口 (8)ADC模块应用示例 (12)TMR0计数器 (16)TMR1时钟(使用内部时钟) (21)TMR1时钟(使用外部晶振) (25)TMR2中断产生方波 (29)CCP输出比较模式应用 (33)CCP捕捉模式应用 (38)PICC开发环境配置2009年5月2日目前已有2,086人读过本文阅读评论发表评论在前面的一段时间里,ANY电子使用Proteus软件带你一起学习了PIC单片机的汇编语言程序的书写。

但是目前在单片机的应用开发中,绝大部分的应用都是使用C语言程序实现。

所以,在学习汇编语言熟悉了PIC单片机的基本结构之后,我们就需要面对一个单片机开发的重要问题:使用C语言开发应用。

在下面的一段时间里,我们将通过一个个具体的实例,一点点逐一向你介绍如何使用PIC 单片机的C语言在PIC的C语言环境里开发C语言程序。

需要注意的是,因为PICC开发工具应用更为广泛,所以在这里,我们将使用PICC开发工具,而不是PIC官方的C语言开发工具。

事实上,PICC开发工具其实更像PIC官方MPLAB集成开发环境的一个插件,所有关于PICC开发PIC单片机C语言程序的使用几乎都是在MPLAB中进行的;PICC没有自己独立的界面和环境。

PICC开发工具是由Hi-tech公司开发推出的,其官方网站地址是:/。

目前在中国大陆,作为学习和科研之用,可以使用其简易版本,或者是面向教育用户的版本;除此之外,你还可以在网上搜索并下载网友提供的各种破解版本。

不过需要说明的是,使用这些版本只可用来学习和科研,如果移作它用,请购买正式版本;否则,由此造成的一切后果,ANY电子不负任何责任。

安装好PICC开发工具(ANY电子安装的是9.60版本)之后,就可以打开MPLAB集成开发环境对开发语言进行配置了。

仿真单片机c语言程序设计实训100例 基于pic proteus仿真

仿真单片机c语言程序设计实训100例 基于pic proteus仿真

仿真单片机c语言程序设计实训100例基于pic proteus
仿真
单片机上使用C语言进行程序设计的基本步骤和要点:
1. **理解硬件**:在开始编程之前,你需要对单片机的硬件有深入的理解。

这包括它的内存结构,输入/输出端口,以及任何特定的硬件特性。

2. **选择开发环境**:有很多可用的单片机开发环境,如Keil、IAR Embedded Workbench等。

这些环境都支持C语言编程,并且提供了编译、调试等功能。

3. **编写代码**:在理解了硬件和开发环境之后,就可以开始编写代码了。

这可能包括配置IO端口,读写内存,以及控制单片机的各种功能。

4. **编译代码**:在大多数开发环境中,你都可以直接编写和编译代码。

编译过程会将你的C代码转换成单片机可以执行的机器码。

5. **调试代码**:这是整个开发过程中最重要的一步。

你可以使用开发环境提供的调试工具来检查你的代码是否按照预期工作。

这可能包括查看变量的值,单步执行代码,以及使用断点等。

6. **仿真和测试**:在真实硬件上测试代码之前,你可以使用仿真软件(如Proteus)来模拟你的代码的行为。

这可以帮助你发现和修复一些在真实硬件上可能无法发现的错误。

7. **在真实硬件上测试**:最后,当你的代码在仿真环境中运行正常后,你就可以将其烧录到真实硬件上进行了。

以上就是在单片机上使用C语言进行程序设计的基本步骤和要点。

不过请注意,由于具体的硬件和开发环境可能会有所不同,因此具体的步骤可能会有所不同。

51单片机四路抢答器PROTEUS仿真报告(含C语言程序)

51单片机四路抢答器PROTEUS仿真报告(含C语言程序)

HEFEI UNIVERSITY四路抢答器仿真设计题目四路抢答器仿真设计班级自动化(1)班成员 YCT 11050310**PT 11050310**WW 11050310**时间 2014.5.19四路抢答器仿真设计目录一、前言 (1)二、方案设计 (1)三、理论分析 (2)四、电路设计 (2)1、晶体振荡器电路 (2)2、复位电路 (3)3、按键扫描部分 (3)4、显示部分 (4)五、软件模块 (6)六、系统组装调试 (8)七、总结 (8)参考文献 (9)附录 (10)四路抢答器仿真设计一、前言本设计要求能够在主持人按下开始键后,四个参赛者开始抢按自己的按键,谁的按键先按下,谁面前的灯就会亮并且有相应的提示,当参赛者耗时太多时又会有相应的提示。

根据设计的要求,本系统采用独立式按键,通过单片机不停的扫描按键来控制LED灯和蜂鸣器,并用定时器T0来定超时的时间,当超时的时候让蜂鸣器响。

二、方案设计(1)、总体设计方案一:采用可编程I/O口扩展芯片82558255作为单片机的扩展接口能实现很多功能,但是这个系统并不复杂,用8155会浪费很多的资源,而且8255要用P0和P2端口作为地址线对它进行读写,这样不仅浪费端口还使得编程变的复杂。

从节省资源和简化编程的角度考虑,放弃了此方案。

方案二:直接采用AT89C52单片机直接用单片机不仅编程被简化,还有效的利用了各个端口。

8051单片机的资源完全够这个系统的要求。

所以最终选择了此方案。

(2)、模块方案一:采用4*4矩阵键盘此种键盘是常用的按键扫描方法,但是本系统只需要六个按键,这样就会浪费十个,而且矩阵按键扫描要送数读数,对于编程很复杂,最终放弃了此方案。

方案二:采用独立式键盘本系统只要六个按键就可以,用独立式键盘不仅节省端口还使编程变得简单。

程序只要不停的读数检查就行。

所以,最终选择此方案。

2、系统总体设计方案与实现框图采用六个独立式的键盘作为按键输入,当在开始后有按键按下时,就会有对应于这个按键的灯亮并且蜂鸣器响一声,其它按键再按也无效。

单片机C语言程序设计实训100例

单片机C语言程序设计实训100例

//恢复定时器 1 初值 //500ms 转换状态
名称:10s 的秒表 说明:首次按键计时开始,再次按键暂停,第三次按键清零。
*/ #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit K1=P3^7; uchar i,Second_Counts,Key_Flag_Idx; bit Key_State; uchar
34 上海师范大学信息与机电工程学院—倪继锋
《单片机 C 语言程序设计实训 100 例---基于 8051 和 PROTEUS 仿真》案例
34 /*
100 000s 以内的计时程序 名称:100 000s 以内的计时程序 说明:在 6 只数码管上完成 0~99 999.9s。
*/ #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int //段码 ucha 中断函数 void LED_Flash_and_Scroll() interrupt 1 { if(++k<35) return; //定时中断若干次后执行闪烁 k=0; switch(i) { case 0: B1=~B1;break; case 1: G1=~G1;break; case 2: R1=~R1;break; case 3: Y1=~Y1;break; default:i=0; } if(++j<300) return; //每次闪烁持续一段时间 j=0; P0=0xff; //关闭显示 i++; //切换到下一个 LED } 30 /* T0 控制 LED 实现二进制计数
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
P0=table[light];
P2=table[high];
delay1s();
}
}
}
void delay1s()
{unsigned char i,j,k;
for(i=82;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
实验十:可预置数加减计数器
程序:
//K1(P3_7)加计数.K2(P3_6)头减计数.
delay10ms();
}
实验九:00~99计数
程序:
//00~99计数器
#include "AT89X51.H"
void delay1s();
void main()
{unsigned char code table[]={0xf9,0x24,0x30,0x19,0x12,0x03,0xf8,0x00,0x18,0x40};
{P0=table1[i];
P2=(P2<<1)+1;
}
}
else if(P1_0==1)
{delay01ms();
if(P1_0==1)
for(i=0;i<8;i++)
{P0=table2[i];
P2=(P2<<1)+1;
}
}
}
}
void delay01ms()
{unsigned char a,b;
unsigned int high=9;
unsigned int light=9;
P0=table[light];
P2=table[high];
delay1s();
while(1)
{for(light=0;light<10;light++)
{if(light==9) high++;
if(high==10) high=0;
#include "AT89X51.H"
void delay02s();
void delay10ms();
void main()
{P0=P2;
while(1)
{if(P3_6==0)
{delay10ms();
if(P3_6==0)
{P0++;
delay02s();
}
}
if(P3_7==0)
{delay10ms();
{switch(key)
{case 0x0e: key=0;break;
case 0x0d: key=1;break;
case 0x0b: key=2;break;
case 0x07: key=3;break;
}
}
P0=table[key];
key=key&0x0f;
while(key!=0x0f)
单片机实验:
说明,以下是我整理了一些在学习单片机的过程中所做的一些典型的实验,所有程序均用C语言编写,为了方便,在仿真时电路能省的都被省掉了(比如省去晶振用了外部时钟)。程序不一定很优化,也不一定完全没有错误,仅供大家参考。
希望大家一块学习!!!!
第一:I/O操作篇
实验一.闪烁的灯
图:
程序:
#include "AT89X51.H"
}
实验四:跑马灯(一)
图:
程序:
//单一灯的左移右移
//八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上
//输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。
#include "AT89X51.H"
void delay02s();
}
}
}
void delay02s()
{unsigned int i,j,k;
for(i=0;i<20;i++)
for(j=0;j<20;j++)
for(k=0;k<248;k++);
}
实验五:跑马灯(二、查表方式)
图:
程序:
#include "AT89X51.H"
void delay02s();
void main()
if(P3_7==0)
{P0--;
delay02s();
}
}
}
}
void delay02s()
{unsigned char j;
for(j=20;j>0;j--)
delay10ms();
}
void delay10ms()
{unsigned char i,k;
for(i=20;i>0;i--)
for(k=248;k>0;k--);
unsigned char disp;
while(1)
{for(disp=0;disp<10;disp++)
{P0=table[disp];
delay02s();
}
}
}
void delay02s()
{ unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(a=4;a>0;a--)
for(b=248;b>0;b--);
}
实验十二、4*4键盘
图:
程序:
#include "AT89X51.H"
void delay10ms();
void main()
{unsigned char key;
unsignedchar table[]={0x40,0xf9,0x24,0x30,
}
实验十一:
图:共阴LED
程序:
//开关按下时显示"12345",开关弹起时显示"HELLO".
#include <AT89X51.H>
void delay01ms();
void main(void)
{unsigned char code table1[]={0xf9,0x24,0x30,0x19,0x12,0xff,0xff,0xff};
{delay10ms();
key=P3&0x0f;
if(key!=0x0f)
{switch(key)
{case 0x0e: key=8;break;
case 0x0d: key=9;break;
case 0x0b: key=10;break;
case 0x07: key=11;break;
else if ( P1_7==1) P1_0 = 1;//key弹起P1_7=1,led熄灭
}
}
实验三:多路开关
程序:
#include "AT89X51.H"
void main()
{while(1)
{P1_0 = P1_7;
P1_1 = P1_6;
P1_2 = P1_5;
P1_3 = P1_4;
}
void main()
{unsigned int a;
while (1)
{P1=0xfe;
delay02s();
for(a=7;a>0;a--)//右移
{P1=(P1<<1)+1;
delay02s();
}
for(a=6;a>0;a--)//左移
{P1=(P1>>1)+0x80;
delay02s();
unsigned char code table2[]={0x09,0x06,0xc7,0xc7,0x40,0xff,0xff,0xff};
unsigned char i;
while(1)
{P2=0xfe;
if(P1_0==0)
{delay01ms();
if(P1_0==0)
for(i=0;i<8;i++)
if(P1_7==0)
{id++;
if(id==4) id=0;
while(P1_7==0);
}
}
switch(id)
{ case 0:
P0_0=~P0_0;
delay02s();
break;
case 1:
P0_1=~P0_1;
delay02s();
break;
case 2:
P0_2=~P0_2;
delay02s();
for(k=248;k>0;k--);
}
实验七:二进制计数
程序:
//用四个发光二极管模拟计数点击开关次数.
#include "AT89X51.H"
void delay10ms();
void main()
{P0=0xff;
while(1)
{
/*
//////////////////////////////////////////////
if(P0_7==1) //按键按下
{delay10ms();
if(P0_7==0) //按键弹起,此时灯亮.
P0=P0-1;
}
//////////////////////////////////////////////
*/
//////////////////////////////////////////////
相关文档
最新文档