{
IT0=0; IT1=0; EX0=1; EX1=1; EA=1; PX0=0; PX1=1; while(1) {
D26=0; } }
void int1(void) interrupt 2 using 1 { P0=0x00; delay(); P0=0xff; delay(); }
void int0(void) interrupt 0 using 0 { int sel,i; sel=0xfe; for(i=0;i<8;i++) { P0=sel; delay(); sel=_crol_(sel,1); } } 仿真图:
11
C2VCC30pFX1CRYSTALU119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161743C318XTAL230pFR910kC1910uF293031RSTPSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51DSW1OFFON12DIPSW_2
实验五 数码管实验
一、实验目的
1、学习并掌握74HC573锁存器的使用方法; 2、学会使用8段共阴极数码管的动态显示方法。
二、实验设备
单片机实验箱一台;PC机一台;USB下载线一根。
三、实验内容
通过编程,实现8段数码管的动态扫描显示,要求8个数码管从左到右分别显示“1”、“2”、“3”、“4”、“A”、“b”、“C”、“d”。
数码管接口电路如图5-1所示:
12
图5-1
数码管接口电路原理图
四、思考题
1.何谓数码管的动态显示,其原理是什么?
2.简述锁存器的工作原理,在本实验中具有什么作用? 程序代码:
#include
char code t[8]={0x06,0x5b,0x4f,0x66,0x77,0x7c,0x39,0x5e}; char code t1[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; void delayms(char xms) { char a,b; for(a=xms;a>0;a--) for(b=125;b>0;b--); }
void main() { char i; while(1) { for(i=0;i<8;i++) { dula=1; wela=0; P0=t[i]; dula=0; wela=1; P0=t1[i]; delayms(10); P0=0XFF; } } }
13
仿真图: C2U1R9VCC10k30pF19U2P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161723456789111D0D1D2D3D4D5D6D7LEOE74HC573Q0Q1Q2Q3Q4Q5Q6Q71918171615141312X1XTAL1C330pFCRYSTAL18XTAL2C110uF9RST293031PSENALEEAU323456789111D0D1D2D3D4D5D6D7LEOE74HC573Q0Q1Q2Q3Q4Q5Q6Q7191817161514131212345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51C40.1uF
实验六 定时器/计数器实验(一)
一、实验目的
掌握单片机定时器和定时中断的编程方法。
二、实验设备
单片机实验箱一台;PC机一台;USB下载线一根。
三、实验内容
编写实验程序,实现59秒倒计时功能,初始状态数码管最后两位显示数字“59”,要求定时器0每10ms产生一次中断,在定时中断服务程序里进行计数,计数满一秒,数码管显示相应减1,倒计时结束时,数码管显示“00”,并以周期1秒进行闪烁,单片机与数码管接口电路原理图见实验五中图5-1所示。
四、思考题
1.画出主程序和定时中断流程图;
2.实验中有何故障、问题出现,是否得到解决?如何解决的? 程序代码:
#include
char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; char numd=59,num; void delayms(char xms) { char a,b; for(a=xms;a>0;a--) for(b=125;b>0;b--); }
14
void display() { char shi,ge; shi=numd/10; ge=numd; dula=1; wela=0; P0=table[shi]; dula=0; wela=1; P0=0xfe; delayms(10); P0=0XFF; dula=1; wela=0; P0=table[ge]; dula=0; wela=1; P0=0xfd; delayms(10); P0=0XFF; }
void main() {
char flag=1; TMOD=0X01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; TR0=1; ET0=1; EA=1; while(1) {
if(num==100) { num=0; if(numd) { numd--; } else { if(flag) flag=0; else flag=1; } } if(flag) display(); }
15