好啊,一定去给你顶一顶!
下面继续上面的帖子
接着继续是数码管的显示,2位数码管实现1分钟的循环计时
程序如下:
/*使用12M晶振,定时器1实现数码管前两位1分钟循环计时*/
/*J6跳接P37口,J16短接使能*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P3^7;
sbit we0=P2^0;
sbit we1=P2^1;
sbit we2=P2^2;
uchar num,num1;
uchar shi,ge;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint x)//延时x ms
{
uint y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--);
}
void display(uchar shi,uchar ge)
{
dula=1;
P0=table[shi]; //送段选数据
dula=0;
P0=0xff;
we2=0;
we1=0;
we0=0;
delayms(5);
dula=1;
P0=table[ge]; //送段选数据
dula=0;
P0=0xff;
we2=0;
we1=0;
we0=1;
delayms(5);
}
void main()
{
num=0;
num1=0;
TMOD=0x10;//设置定时器1为工作方式1
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET1=1;
TR1=1;
while(1)
{
display(shi,ge);
if(num==20)
{
num=0;
num1++;
if(num1==60)
num1=0;
shi=num1/10;
ge=num1%10;
}
}
}
void time1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
num++;
}
图片如下:
接下来是另外一个基本程序
矩阵键盘---一位数码管实现按键键值显示
程序如下:
/*使用12M晶振,1位数码管显示按键的键值0-F*/
/*J6跳接VCC口,J16短接使能,J11跳接P37口*/
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit we0=P2^0;
sbit we1=P2^1;
sbit we2=P2^2;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint x)//延时x ms
{
uint y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--);
}
uchar keyscan()
{
uchar scode,rcode;
P3=0x0f; //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f) //有键按下
{
delayms(10); //延时去抖动
if ((P3&0x0f)!= 0x0f)
{
scode = 0xef; //逐行扫描初值
while((scode&0x01)!=0)
{
P3=scode;
if((P3&0x0f)!=0x0f)
{
rcode=(P3&0x0f)|0xf0;
return((~scode)+(~rcode));
}
else
scode=(scode<<1)|0x01;
}
}
}
return 0; //无键按下,返回0
}
void main()
{
uchar key;
we2=0;
we1=0;
we0=0;
//点亮第一位数码管
while(1)
{
key=keyscan();
if(key!=0);
{
switch(key)
{
case 0x81:P0=table[0];break;
case 0x82:P0=table[1];break;
case 0x84:P0=table[2];break;
case 0x88:P0=table[3];break;
case 0x41:P0=table[4];break;
case 0x42:P0=table[5];break;
case 0x44:P0=table[6];break;
case 0x48:P0=table[7];break;
case 0x21:P0=table[8];break;
case 0x22:P0=table[9];break;
case 0x24:P0=table[10];break;
case 0x28:P0=table[11];break;
case 0x11:P0=table[12];break;
case 0x12:P0=table[13];break;
case 0x14:P0=table[14];break;
case 0x18:P0=table[15];break;
}
}
}
}
图片如下:
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |