电路仿真
- 格式:doc
- 大小:275.00 KB
- 文档页数:20
以实例说明进行电路仿真的详细步骤及注意事项电路仿真是通过计算机模拟电路的性能和行为的过程。
它是电路设计和分析的重要工具,可以帮助工程师验证电路的可靠性、提高设计效率、减少开发成本。
以下是进行电路仿真的详细步骤及注意事项:1.问题定义:明确需要解决的问题或评估的电路行为。
例如,验证电路的稳定性、计算电路的频率响应等。
2. 电路设计:根据问题定义,设计电路图。
可以使用电路设计软件如OrCAD、Altium Designer等进行电路图的绘制。
3.元器件选择:根据电路的参数要求选择适合的元器件。
注意选择元器件时要考虑其性能指标、容差范围等因素。
4.参数设定:为电路中的元器件设置合适的参数。
例如,电阻的阻值、电容的容值等。
5.仿真设置:将电路图导入到仿真软件中,并设置仿真的参数。
例如,仿真的时间范围、采样率等。
6.仿真运行:运行仿真程序,观察电路的响应情况。
仿真软件会根据电路图和设置的参数计算出电路在不同时间点的电压、电流等值。
7.结果分析:根据仿真结果进行分析。
可以比较仿真结果与预期设计目标的差异,评估电路的性能。
8.优化设计:根据仿真分析的结果,对电路进行优化设计。
可以尝试调整元器件的参数、改变电路拓扑等来提升电路性能。
9.进一步验证:进行进一步的仿真验证,以确认电路的改进。
10.实验验证:如果需要,可以将设计出的电路进行实际测试,验证仿真结果的准确性。
在进行电路仿真时,还需要注意以下几个方面:1.确保电路图的正确性:在进行仿真前,仔细检查电路图的连线和元器件的值是否正确,以避免仿真结果不准确。
2.合理设置仿真参数:根据具体的仿真需求,设置仿真的时间范围和采样率等参数。
时间范围要足够覆盖需要分析的电路行为,采样率要足够高以保证仿真结果的准确性。
3.注意元器件的模型选择:在进行仿真时,需要为元器件选择合适的模型。
一些元器件的仿真模型可能会影响到仿真结果的准确性。
4.增加适当的边界条件:在仿真电路时,需要考虑电路与外部环境的交互作用。
电路仿真的必备条件
电路仿真是一种通过计算机软件模拟电路行为和性能的方法,它为电路设计师提供了快速、准确评估电路各种参数和功能的能力。
在进行电路仿真之前,有一些必备条件需要满足,以确保仿真结果的准确性和可靠性。
电路图是进行电路仿真的基础。
电路图是电路设计的图形表达,它明确了电路中各个元件之间的连接和关系。
在进行电路仿真前,需要准确绘制电路图,包括电源、电阻、电容、电感、晶体管、集成电路等元件的连线和位置。
电路图的准确性对电路仿真结果起着重要作用。
电路仿真所需的电路参数是必不可少的。
电路参数是电路元件的性能指标,如电流、电压、功率、频率响应等。
在进行电路仿真之前,需要准确获得电路元件的参数,这些参数可以通过电路元件的数据手册或实验测量获得。
只有准确的参数才能保证电路仿真结果的准确性。
仿真软件是进行电路仿真的必备工具。
市面上有很多电路仿真软件可供选择,如Multisim、LTspice、PSpice等。
这些软件具有用户友好的界面和强大的仿真功能,能够模拟和分析各种电路类型。
选择合适的电路仿真软件,并熟练掌握其使用方法,是进行电路仿真的前提。
电路仿真所需的输入信号也是必不可少的。
输入信号是指应用于电路的激励信号,可以是交流信号、直流信号或任意波形信号。
在进行电路仿真前,需要确定输入信号的类型、幅度和频率等参数,以便进行仿真分析和评估电路的性能。
电路仿真的必备条件包括准确的电路图、准确的电路元件参数、适合的仿真软件以及合适的输入信号。
只有在这些条件齐备的情况下,才能进行准确、可靠的电路仿真,为电路设计和优化提供有效的工具和依据。
以实例说明进行电路仿真的详细步骤及注意事项电路仿真是指利用计算机软件对电路进行模拟,以评估其性能和功能。
下面将详细介绍电路仿真的步骤及注意事项。
步骤一:准备工作在进行电路仿真前,需要明确仿真的目标和要求,了解原理电路的参数、器件特性和功能。
此外,还需要准备计算机和电路仿真软件,并确保软件具备完成仿真所需的功能。
步骤二:绘制电路图利用电路仿真软件绘制原理电路的拓扑结构,包括各个器件的连接方式和元件之间的连接关系。
步骤三:设置参数根据仿真目的和要求,设置电路中各个器件的参数,例如电阻、电容、电感等的数值,以及电压和电流源的数值和类型。
步骤四:添加信号源在绘制的电路图上添加输入信号,可以是一条电压源或电流源,以模拟特定信号对电路的影响。
步骤五:运行仿真设置仿真的起止时间和步长等参数,并开始运行电路仿真软件。
软件将自动对电路进行仿真计算,获得电路在不同时间点上各个节点的电压和电流数值。
步骤六:结果分析分析仿真结果,查看电路在仿真过程中的动态响应和稳态特性。
可以对仿真结果进行波形显示、功率谱分析、频率响应分析等,以评估电路的性能和功能是否满足要求。
注意事项:1. 选择合适的仿真软件:根据电路的复杂性和仿真要求,选择合适的仿真软件。
一些常用的仿真软件包括SPICE、Multisim、PSPICE等。
2.模型的准确性:选择合适的元件模型进行仿真,确保模型能够准确地描述实际器件的特性和行为。
3.参数设置的准确性:在进行仿真前,需要对电路中各个器件的参数进行准确的设置。
参数设置错误可能导致仿真结果与实际情况不一致。
4.正确的初始条件:仿真前,需要注意设置电路初始条件,包括电容的初始电压、电感的初始电流等。
不正确的初始条件可能会导致仿真结果不准确。
5.控制仿真时间和步长:根据仿真目的和要求,选择合适的仿真时间和步长。
时间太短可能无法观察到电路的稳态特性,步长太大可能导致仿真结果不准确。
6.结果的合理解读:分析仿真结果时,需要注意结果的合理解读。
1. 理解电路基本理论,掌握电路分析方法。
2. 掌握电路仿真软件(如Multisim)的使用方法。
3. 分析电路参数对电路性能的影响。
二、实验内容本次实验主要针对一阶RC电路进行仿真分析,包括零输入响应、零状态响应和全响应的规律和特点。
三、实验原理一阶RC电路由一个电阻R和一个电容C串联而成,其电路符号如下:```+----[ R ]----[ C ]----+| |+---------------------+```一阶RC电路的传递函数为:H(s) = 1 / (1 + sRC)其中,s为复频域变量,R为电阻,C为电容,RC为电路的时间常数。
根据传递函数,可以得到以下结论:1. 当s = -1/RC时,电路发生谐振。
2. 当s = 0时,电路发生零输入响应。
3. 当s = jω时,电路发生零状态响应。
四、实验仪器与设备1. 电脑:用于运行电路仿真软件。
2. Multisim软件:用于搭建电路模型和进行仿真实验。
1. 打开Multisim软件,创建一个新的仿真项目。
2. 在项目中选择“基本电路库”,搭建一阶RC电路模型。
3. 设置电路参数,如电阻R、电容C等。
4. 选择合适的激励信号,如正弦波、方波等。
5. 运行仿真实验,观察电路的响应波形。
6. 分析仿真结果,验证实验原理。
六、实验结果与分析1. 零输入响应当电路处于初始状态,即电容电压Uc(0-) = 0V时,给电路施加一个初始电压源,电路开始工作。
此时,电路的响应为电容的充电过程。
通过仿真实验,可以得到以下结论:(1)随着时间t的增加,电容电压Uc逐渐增大,趋于稳态值。
(2)电容电流Ic先减小后增大,在t = 0时达到最大值。
(3)电路的时间常数τ = RC,表示电路响应的快慢。
2. 零状态响应当电路处于初始状态,即电容电压Uc(0-) = 0V时,给电路施加一个激励信号,电路开始工作。
此时,电路的响应为电容的放电过程。
通过仿真实验,可以得到以下结论:(1)随着时间t的增加,电容电压Uc逐渐减小,趋于0V。
电路仿真实验报告一、实验目的通过电路仿真实验,了解和掌握电路设计和分析的基本原理和方法,培养学生解决实际电路问题的能力。
二、实验器材1.计算机2.电路仿真软件3.电路设计平台4.万用表三、实验内容1.选择一个电路仿真软件,并了解其基本操作方法。
2.使用电路仿真软件进行简单电路的仿真设计。
3.基于仿真结果,根据实验内容进行电路设计和分析。
四、实验步骤1.打开电路仿真软件,并了解其基本操作方法。
2.根据实验要求,选择一个简单电路进行设计,例如二阶低通滤波器。
3.使用电路设计平台进行电路的搭建,包括选择合适的电阻、电容和运放等器件。
4.在电路设计平台上进行参数设置,例如频率范围和截止频率等。
5.运行仿真,观察电路的响应曲线和频率特性。
6.根据仿真结果,分析电路的性能和特点,并进行相关讨论。
7.如果仿真结果不符合预期,可以调整电路参数或者改变电路结构,重新运行仿真并分析结果。
8.根据实验要求,记录仿真结果并撰写实验报告。
五、实验结果与分析在本次实验中,我们选择了一个二阶低通滤波器进行仿真设计。
根据实验要求,我们选择了合适的电阻、电容和运放等器件进行电路搭建。
通过仿真软件运行仿真,我们得到了电路的频率响应曲线和频率特性的结果。
根据图表分析,我们可以看到,在低频时,滤波器具有较好的通过性能,而在高频时,滤波器开始出现截止的现象。
我们还可以通过改变电路参数来观察电路的变化。
例如,增大电容值可以降低截止频率,使滤波器具有较好的低频通过特性。
而增大电阻值则可以增加滤波器的阻带特性。
通过实验结果的分析,我们可以得到滤波器的性能和特点,并根据实际应用的需求来调整电路参数和结构。
六、实验总结与心得体会通过电路仿真实验,我们学习到了电路设计和分析的基本原理和方法。
通过选择合适的电路仿真软件,并根据实验要求进行电路搭建和参数设置,运行仿真并分析结果,我们可以对电路的性能和特点有更深入的了解。
通过本次实验,我还发现了电路设计和分析的一些问题和挑战。
Multisim模拟电路仿真实验电路仿真是电子工程领域中重要的实验方法,它通过计算机软件模拟电路的工作原理和性能,可以在电路设计阶段进行测试和验证。
其中,Multisim作为常用的电路设计与仿真工具,具有强大的功能和用户友好的界面,被广泛应用于电子工程教学和实践中。
本文将对Multisim模拟电路仿真实验进行探讨和介绍,包括电路仿真的基本原理、Multisim的使用方法以及实验设计与实施等方面。
通过本文的阅读,读者将能够了解到Multisim模拟电路仿真实验的基本概念和操作方法,掌握电路仿真实验的设计和实施技巧。
一、Multisim模拟电路仿真的基本原理Multisim模拟电路仿真实验基于电路分析和计算机仿真技术,通过建立电路模型和参数设置,使用数值计算方法求解电路的节点电压、电流以及功率等相关参数,从而模拟电路的工作情况。
Multisim模拟电路仿真的基本原理包括以下几个方面:1. 电路模型建立:首先,需要根据电路的实际连接和元件参数建立相应的电路模型。
Multisim提供了丰富的元件库和连接方式,可以通过简单的拖拽操作和参数设置来搭建电路模型。
2. 参数设置:在建立电路模型的基础上,需要为每个元件设置合适的参数值。
例如,电阻器的阻值、电容器的容值、电源的电压等。
这些参数值将直接影响到电路的仿真结果。
3. 仿真方法选择:Multisim提供了多种仿真方法,如直流分析、交流分析、暂态分析等。
根据不同的仿真目的和需求,选择适当的仿真方法来进行仿真计算。
4. 仿真结果分析:仿真计算完成后,Multisim会给出电路的仿真结果,包括节点电压、电流、功率等参数。
通过分析这些仿真结果,可以评估电路的性能和工作情况。
二、Multisim的使用方法Multisim作为一款功能强大的电路设计与仿真工具,具有直观的操作界面和丰富的功能模块,使得电路仿真实验变得简单而高效。
以下是Multisim的使用方法的基本流程:1. 新建电路文件:启动Multisim软件,点击“新建”按钮创建一个新的电路文件。
电路仿真工具比较与选择指南电路仿真工具在电子设计领域扮演着重要的角色,它们可以帮助工程师验证设计的正确性、提高设计效率和减少试错成本。
然而,市场上存在众多不同类型的电路仿真工具,如SPICE仿真器、EDA工具、嵌入式系统仿真工具等,选择合适的工具变得至关重要。
在本文中,我将对几种常见的电路仿真工具进行比较,并提供选择指南,帮助工程师们更好地选择适合自己需求的工具。
1. SPICE仿真器SPICE(Simulation Program with Integrated Circuit Emphasis)是一种通用的电路仿真工具,具有广泛的应用范围。
它可以模拟各种电路,包括模拟电路、数字电路、混合信号电路等。
SPICE仿真器的核心是基于各种电路元件的数学模型进行计算,能够准确地模拟电路的行为和特性。
然而,SPICE仿真器的计算速度比较慢,对于大型复杂电路的仿真可能会耗费较长的时间。
2. EDA工具EDA(Electronic Design Automation)工具是一类专门用于电子设计的集成软件工具,包括原理图绘制、电路仿真、PCB设计、封装设计等功能。
EDA工具在电子设计过程中起着至关重要的作用,可以帮助工程师快速、高效地完成设计任务。
常见的EDA工具有Cadence、Mentor Graphics、Altium Designer等,它们提供了强大的仿真功能,适用于各种不同类型的电路设计。
3. 嵌入式系统仿真工具嵌入式系统仿真工具主要用于嵌入式系统设计,可以帮助工程师验证系统的功能和性能,减少硬件设计和调试的时间。
常见的嵌入式系统仿真工具有ModelSim、Quartus II等,它们具有强大的仿真和调试功能,能够帮助工程师快速验证系统设计的正确性。
在选择电路仿真工具时,工程师应根据自己的设计需求和预算来进行评估和比较。
以下是一些建议的选择指南:1. 确定设计需求:首先要明确自己的设计需求,包括电路类型、仿真规模、仿真精度等,然后选择功能和性能适合的仿真工具。
#include <reg52.h>#define uint unsigned int#define uchar unsigned charuchar code FFW[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09 };uchar code REV[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01 };sbit K1 = P3^0;sbit K2 = P3^1;sbit K3 = P3^2;void DelayMS(uint ms){uchar i;while(ms--){for(i=0;i<120;i++);}}void SETP_MOTOR_FFW(uchar n) {uchar i,j;for(i=0;i<5*n;i++){for(j=0;j<8;j++){if(K3 == 0) break;P1 = FFW[j];DelayMS(25);}}}void SETP_MOTOR_REV(uchar n) {uchar i,j;for(i=0;i<5*n;i++){for(j=0;j<8;j++){if(K3 == 0) break;P1 = REV[j];DelayMS(25);}}}void main(){uchar N = 3;while(1){if(K1 == 0){P0 = 0xfe;SETP_MOTOR_FFW(N);if(K3 == 0) break;}else if(K2 == 0){P0 = 0xfd;SETP_MOTOR_REV(N);if(K3 == 0) break;}else{P0 = 0xfb;P1 = 0x03;}}}/*************** writer:shopping.w ******************/ #include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}sbit DQ = P3^3;sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;uchar code Temp_Disp_Title[]={"Current Temp : "}; uchar Current_Temp_Display_Buffer[]={" TEMP: "};uchar code Temperature_Char[8] ={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};uchar CurrentT = 0;uchar Temp_Value[]={0x00,0x00};uchar Display_Digit[]={0,0,0,0};bit DS18B20_IS_OK = 1;void DelayXus(uint x){uchar i;while(x--){for(i=0;i<200;i++);}}bit LCD_Busy_Check(){bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN=0;return result;}void Write_LCD_Command(uchar cmd){while(LCD_Busy_Check());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}void Write_LCD_Data(uchar dat){while(LCD_Busy_Check());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;}void LCD_Initialise(){Write_LCD_Command(0x01);DelayXus(5);Write_LCD_Command(0x38);DelayXus(5);Write_LCD_Command(0x0c);DelayXus(5);Write_LCD_Command(0x06);DelayXus(5);}void Set_LCD_POS(uchar pos){Write_LCD_Command(pos|0x80); }void Delay(uint x){while(--x);}uchar Init_DS18B20(){uchar status;DQ = 1;Delay(8);DQ = 0;Delay(90);DQ = 1;Delay(8);DQ = 1;return status;}uchar ReadOneByte(){uchar i,dat=0;DQ = 1;_nop_();for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;_nop_();_nop_();if(DQ)dat |= 0X80;Delay(30);DQ = 1;}return dat;}void WriteOneByte(uchar dat) {uchar i;for(i=0;i<8;i++){DQ = 0;DQ = dat& 0x01;Delay(5);DQ = 1;dat >>= 1;}}void Read_Temperature(){if(Init_DS18B20()==1)DS18B20_IS_OK=0;else{WriteOneByte(0xcc);WriteOneByte(0x44);Init_DS18B20();WriteOneByte(0xcc);WriteOneByte(0xbe);Temp_Value[0] = ReadOneByte();Temp_Value[1] = ReadOneByte();DS18B20_IS_OK=1;}}void Display_Temperature(){uchar i;uchar t = 150, ng = 0;if((Temp_Value[1]&0xf8)==0xf8){Temp_Value[1] = ~Temp_Value[1];Temp_Value[0] = ~Temp_Value[0]+1;if(Temp_Value[0]==0x00)Temp_Value[1]++;ng = 1;}Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);Display_Digit[3] = CurrentT/100;Display_Digit[2] = CurrentT%100/10;Display_Digit[1] = CurrentT%10;Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0';Current_Temp_Display_Buffer[10] = '.';Current_Temp_Display_Buffer[9] = Display_Digit[1] + '0';Current_Temp_Display_Buffer[8] = Display_Digit[2] + '0';Current_Temp_Display_Buffer[7] = Display_Digit[3] + '0';if(Display_Digit[3] == 0)Current_Temp_Display_Buffer[7] = ' ';if(Display_Digit[2] == 0&&Display_Digit[3]==0)Current_Temp_Display_Buffer[8] = ' ';if(ng){if(Current_Temp_Display_Buffer[8] == ' ')Current_Temp_Display_Buffer[8] = '-';else if(Current_Temp_Display_Buffer[7] == ' ')Current_Temp_Display_Buffer[7] = '-';elseCurrent_Temp_Display_Buffer[6] = '-';}Set_LCD_POS(0x00);for(i=0;i<16;i++){Write_LCD_Data(Temp_Disp_Title[i]);}Set_LCD_POS(0x40);for(i=0;i<16;i++){Write_LCD_Data(Current_Temp_Display_Buffer[i]);}Set_LCD_POS(0x4d);Write_LCD_Data(0x00);Set_LCD_POS(0x4e);Write_LCD_Data('C');}void main(){LCD_Initialise();Read_Temperature();Delay(50000);Delay(50000);while(1){Read_Temperature();if(DS18B20_IS_OK)Display_Temperature();DelayXus(100);}}#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit BEEP = P3^7;uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00 };uchar Pre_KeyNO = 16,KeyNO = 16;void DelayMS(uint ms){uchar t;while(ms--){for(t=0;t<120;t++);}}void Keys_Scan(){uchar Tmp;P1 = 0x0f;DelayMS(1);Tmp = P1 ^ 0x0f;switch(Tmp){case 1: KeyNO = 0; break;case 2: KeyNO = 1; break;case 4: KeyNO = 2; break;case 8: KeyNO = 3; break;default: KeyNO = 16;}P1 = 0xf0;DelayMS(1);Tmp = P1 >> 4 ^ 0x0f;switch(Tmp){case 1: KeyNO += 0; break;case 2: KeyNO += 4; break;case 4: KeyNO += 8; break;case 8: KeyNO += 12;}}void Beep(){uchar i;for(i=0;i<100;i++){DelayMS(1);BEEP = ~BEEP;}BEEP = 1;}void main(){P0 = 0x00;while(1){P1 = 0xf0;if(P1 != 0xf0)Keys_Scan();if(Pre_KeyNO != KeyNO){P0 = ~DSY_CODE[KeyNO];Beep();Pre_KeyNO = KeyNO;}DelayMS(100);}#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar Count;sbit Dot = P0^7;uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };uchar Digits_of_6DSY[]={0,0,0,0,0,0};void DelayMS(uint x){uchar i;while(--x){for(i=0;i<120;i++);}}void main(){uchar i,j;P0 = 0x00;P3 = 0xff;Count =0;TMOD = 0x01;TH0 = (65535-50000)/256;TL0 = (65535-50000)%256;IE = 0x82;TR0 = 1;while(1){j = 0x7f;for(i=5;i!=-1;i--){j=_crol_(j,1);P3 = j;P0 = DSY_CODE[Digits_of_6DSY[i]];if(i==1) P0 |= 0x80;DelayMS(2);}}}void Time0() interrupt 1{uchar i;TH0 = (65535-50000)/256;TL0 = (65535-50000)%256;if(++Count !=2) return;Count = 0;Digits_of_6DSY[0]++;for(i=0;i<=5;i++){if(Digits_of_6DSY[i] == 10){Digits_of_6DSY[i] = 0;if(i != 5) Digits_of_6DSY[i+1]++;}else break;}}#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar code Table_OF_Digits[]={0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, 0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00, };uchar i=0,t=0,Num_Index = 0;void main(){P3 = 0x80;Num_Index = 0;TMOD = 0x00;TH0 = (8192-2000)/32;TL0 = (8192-2000)%32;TR0 = 1;IE = 0x82;while(1);}void LED_Screen_Display() interrupt 1{TH0 = (8192-2000)/32;TL0 = (8192-2000)%32;P3 = _crol_(P3,1);P0 = ~Table_OF_Digits[Num_Index * 8 +i];if(++i == 8) i = 0;if(++t == 250){t = 0x00;if(++Num_Index == 10) Num_Index = 0;}}/*************** writer:shopping.w ******************/ #include <reg52.h>#include <intrins.h>#include <string.h>#define uint unsigned int#define uchar unsigned charsbit IO = P1^0;sbit SCLK = P1^1;sbit RST = P1^2;sbit RS = P2^0;sbit RW = P2^1;sbit EN = P2^2;uchar *WEEK[]={"SUN","***","MON","TUS","WEN","THU","FRI","SAT" };uchar LCD_DSY_BUFFER1[]={"DA TE 00-00-00 "};uchar LCD_DSY_BUFFER2[]={"TIME 00:00:00 "};uchar DateTime[7];void DelayMS(uint ms){uchar i;while(ms--){for(i=0;i<120;i++);}}void Write_A_Byte_TO_DS1302(uchar x){uchar i;for(i=0;i<8;i++){IO=x&0x01;SCLK=1;SCLK=0;x>>=1;}}uchar Get_A_Byte_FROM_DS1302(){uchar i,b=0x00;for(i=0;i<8;i++){b |= _crol_((uchar)IO,i);SCLK=1;SCLK=0;}return b/16*10+b%16;}uchar Read_Data(uchar addr){uchar dat;RST = 0;SCLK=0;RST=1;Write_A_Byte_TO_DS1302(addr);dat = Get_A_Byte_FROM_DS1302();SCLK=1;RST=0;return dat;}void GetTime(){uchar i,addr = 0x81;for(i=0;i<7;i++){DateTime[i]=Read_Data(addr);addr+=2;}}uchar Read_LCD_State(){uchar state;RS=0;RW=1;EN=1;DelayMS(1);state=P0;EN = 0;DelayMS(1);return state;}void LCD_Busy_Wait(){while((Read_LCD_State()&0x80)==0x80);DelayMS(5);}void Write_LCD_Data(uchar dat){LCD_Busy_Wait();RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0; }void Write_LCD_Command(uchar cmd){LCD_Busy_Wait();RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0; }void Init_LCD(){Write_LCD_Command(0x38);DelayMS(1);Write_LCD_Command(0x01);DelayMS(1);Write_LCD_Command(0x06);DelayMS(1);Write_LCD_Command(0x0c);DelayMS(1);}void Set_LCD_POS(uchar p){Write_LCD_Command(p|0x80);}void Display_LCD_String(uchar p,uchar *s){uchar i;Set_LCD_POS(p);for(i=0;i<16;i++){Write_LCD_Data(s[i]);DelayMS(1);}}void Format_DateTime(uchar d,uchar *a){a[0]=d/10+'0';a[1]=d%10+'0';}void main(){Init_LCD();while(1){GetTime();Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5);Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8);Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11);strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]]);Format_DateTime(DateTime[2],LCD_DSY_BUFFER1+5);Format_DateTime(DateTime[1],LCD_DSY_BUFFER1+8);Format_DateTime(DateTime[0],LCD_DSY_BUFFER1+11);Display_LCD_String(0x00,LCD_DSY_BUFFER1);Display_LCD_String(0x40,LCD_DSY_BUFFER2);}}#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit k3 = P3^4;sbit k4 = P3^5;uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff };uchar code Scan_BITs[]={0x20,0x10,0x08,0x04,0x02,0x01};uchar data Buffer_Counts[]={0,0,0,0,0,0};uint Count_A=0;uint Count_B=0;void DelayMS(uint x){uchar t;while(x--){for(t=0;t<120;t++);}}void Show_Counts(){uint i;Buffer_Counts[2] = Count_A / 100;Buffer_Counts[1] = Count_A % 100 /10;Buffer_Counts[0] = Count_A % 10;if(Buffer_Counts[2]==0){Buffer_Counts[2] = 0x0a;if(Buffer_Counts[1]==0){Buffer_Counts[1]=0x0a;}}Buffer_Counts[5] = Count_B / 100;Buffer_Counts[4] = Count_B % 100 /10;Buffer_Counts[3] = Count_B % 10;if(Buffer_Counts[5]==0){Buffer_Counts[5] = 0x0a;if(Buffer_Counts[4]==0){Buffer_Counts[4]=0x0a;}}for(i=0;i<6;i++){P2 = Scan_BITs[i];P1 = DSY_CODE[Buffer_Counts[i]];DelayMS(1);}}void main(){IT0 = 1;IT1 = 1;PX0 = 1;IE = 0x85;while(1){if(k3 == 0) Count_A = 0;if(k4 == 0) Count_B = 0;Show_Counts();}}void EX_INT0() interrupt 0{Count_A++;}void EX_INT1() interrupt 2{Count_B++;}。