[proofplan]
We construct a descending sequence of conditions, choosing at stage $n$ a condition lying in the dense set $D_n$ and strengthening all earlier choices. The filter is then the upward closure of this descending sequence. Upward closure is built into the definition, directedness follows because any two elements of the filter are both weakened by a sufficiently late member of the sequence, and the filter meets each dense set because the corresponding chosen condition lies in it. The countable chain condition is part of the statement of Martin's axiom but is not used in the countable case.
[/proofplan]
[step:Choose a descending sequence meeting the dense sets one by one]
Since $P$ is nonempty, choose an initial condition $r_0 \in P$. Since $D_0$ is dense in $P$, choose $p_0 \in D_0$ such that $p_0 \leq r_0$.
We now define a sequence $p: \omega \to P$ by recursion, writing $p_n := p(n)$. Suppose $p_n \in P$ has been chosen. Since $D_{n+1}$ is dense in $P$, there exists $p_{n+1} \in D_{n+1}$ such that $p_{n+1} \leq p_n$. Thus we obtain a sequence $(p_n)_{n \in \omega}$ such that $p_n \in D_n$ for every $n \in \omega$ and $p_{n+1} \leq p_n$ for every $n \in \omega$.
[guided]
The goal is to meet countably many dense sets. Since there are only countably many of them, we can meet them one at a time while always strengthening the previous condition.
Because $P$ is nonempty, choose $r_0 \in P$. The set $D_0$ is dense, so applying the definition of density to the condition $r_0$ gives a condition $p_0 \in D_0$ such that $p_0 \leq r_0$.
We now construct a map $p: \omega \to P$ recursively, and write $p_n := p(n)$. Assume that $p_n \in P$ has already been constructed. The set $D_{n+1}$ is dense, so applying density to $p_n$ gives a condition $p_{n+1} \in D_{n+1}$ such that $p_{n+1} \leq p_n$.
This produces a descending sequence in the forcing order. Since smaller conditions are stronger, the inequality $p_{n+1} \leq p_n$ means that the later condition $p_{n+1}$ extends the information contained in $p_n$. By construction, each dense set is hit at its own stage: $p_n \in D_n$ for every $n \in \omega$.
[/guided]
[/step]
[step:Define the filter generated by the descending sequence]
Define
\begin{align*}
G := \{q \in P : p_n \leq q \text{ for some } n \in \omega\}.
\end{align*}
We prove that $G$ is a filter.
First, $G$ is upward closed. Let $q \in G$ and let $s \in P$ satisfy $q \leq s$. By definition of $G$, there exists $n \in \omega$ such that $p_n \leq q$. Since $\leq$ is transitive, $p_n \leq s$. Hence $s \in G$.
Second, $G$ is directed. Let $q,s \in G$. Then there exist $m,n \in \omega$ such that $p_m \leq q$ and $p_n \leq s$. Let $k := \max\{m,n\}$. Since the sequence is descending, $p_k \leq p_m$ and $p_k \leq p_n$. By transitivity, $p_k \leq q$ and $p_k \leq s$. Also $p_k \in G$, because $p_k \leq p_k$. Therefore $G$ is directed.
[/step]
[step:Verify that the filter meets every dense set]
Let $n \in \omega$. From the construction, $p_n \in D_n$. Also $p_n \in G$, since $p_n \leq p_n$. Hence $p_n \in G \cap D_n$. Therefore $G \cap D_n \neq \varnothing$ for every $n \in \omega$.
We have constructed a filter meeting every member of the countable family $(D_n)_{n \in \omega}$. The countable chain condition hypothesis was not used, so the conclusion holds in particular for every ccc poset. This proves $MA_{\aleph_0}$.
[/step]